Route Assistant
Purpose
Can weather data help predict costs associated with routes?
Database Connections
DuckDB
Loading Custom Output Scripts
Tables
table building
# Table Theming Script ----
#' @description
#' This script provides functions to create and theme tables using the `gt` package.
#' It includes options for customizing colors, footnotes, and other stylistic elements.
#'
# eval_palette ----
#' @description
#' A helper function to evaluate color palettes using the `paletteer` package.
#' @param pal_name The name of the palette to evaluate.
#' @param n The number of colors to generate (default is 10).
#' @param pal_type The type of palette ("c" for continuous, "d" for discrete, or "dynamic" for dynamic palettes).
#' @param direction The direction of the palette (e.g., 1 for normal, -1 for reversed).
#'
#' @return A vector of colors corresponding to the specified palette.
#'
#' @example
#' \dontrun{
#' colors <- eval_palette("ggsci::springfield_simpsons", n = 5, pal_type = "d")
#' }
#' @export
eval_palette <- function(pal_name, n = 10, pal_type, direction = NULL) {
if (pal_type == "c") {
return(paletteer_c(pal_name, n, direction))
} else if (pal_type == "d") {
return(paletteer_d(pal_name, n, direction))
} else if (pal_type == "dynamic") {
return(paletteer_dynamic(pal_name, n, direction))
}
}
# r_table_theming ----
#' @description
#' The main function to create and theme a table using the `gt` package.
#' @details
#' **Color Coding** Applies color palettes to specific columns or the entire table.
#' **Footnotes** Adds footnotes to specific columns or locations in the table.
#' **Column Labels** Customizes the appearance of column labels, including background colors.
#' **Table Styling** Applies various styling options, such as borders, padding, and font weights.
#' **Shadow Effects** Optionally adds shadow effects to table body cells.
#'
#' @param r_df The data frame to be converted into a table.
#' @param title The title of the table.
#' @param subtitle The subtitle of the table.
#' @param footnotes_df A data frame containing footnotes and their locations.
#' @param source_note A source note to be added at the bottom of the table.
#' @param pal_df A data frame containing color palettes and columns to apply them to.
#' @param color_by_columns Columns to apply color to (default is NULL).
#' @param row_name_col The column to use as row names (default is NULL).
#' @param do_col_labels Whether to apply custom styling to column labels (default is FALSE).
#' @param target_everything Whether to apply color to all columns (default is FALSE).
#' @param doBodyShadows Whether to apply shadow effects to table body cells (default is FALSE).
#'
#' @return A themed `gt` table object.
#'
#' @example
#' \dontrun{
#' data <- data.frame(
#' Name = c("Alice", "Bob", "Charlie"),
#' Score = c(85, 92, 78)
#' )
#' pal_df <- data.frame(
#' cols = list("Score"),
#' pals = list(eval_palette("ggsci::springfield_simpsons", n = 3, pal_type = "d"))
#' )
#' footnotes_df <- data.frame(
#' notes = list("High score"),
#' locations = list("Score")
#' )
#' themed_table <- r_table_theming(
#' r_df = data,
#' title = "Student Scores",
#' subtitle = "Fall 2023",
#' footnotes_df = footnotes_df,
#' source_note = "Source: School Records",
#' pal_df = pal_df,
#' do_col_labels = TRUE
#' )
#' themed_table
#' }
#'
# r_table_theming ----
# Main function to create and theme a table using the `gt` package.
#' @export
r_table_theming <- function(r_df,
title,
subtitle,
footnotes_df,
source_note,
pal_df,
color_by_columns = NULL,
row_name_col = NULL,
do_col_labels = FALSE,
target_everything = FALSE,
doBodyShadows = FALSE,
footnotes_multiline = TRUE,
table_font_size = pct(100),
multiline_feet = TRUE
) {
# Initialize the gt table
if(is.null(row_name_col)) {
# If no row name column is specified, create a basic gt table
r_table <- gt(r_df)
} else {
# If a row name column is specified, use it as the row names in the table
r_table <- gt(r_df, rowname_col = row_name_col)
}
# Apply color coding to specific columns or the entire table
if (nrow(r_df) > 1 && target_everything == FALSE) {
# Apply color palettes to specific columns defined in pal_df
r_table <- seq_len(nrow(pal_df)) |>
reduce(\(acc, i) {
data_color(acc,
columns = pal_df$cols[[i]], # Apply color to specified columns
palette = pal_df$pals[[i]] # Use the specified palette
)
}, .init = r_table) # Start with the initial table and accumulate changes
}
else if (nrow(r_df) > 1 && target_everything == TRUE) {
# Apply color palettes to all columns
r_table <- seq_len(nrow(pal_df)) |>
reduce(\(acc, i) {
data_color(
acc,
columns = color_by_columns, # Apply color to specified columns
palette = pal_df$pals[[i]], # Use the specified palette
target_columns = everything() # Apply color to all columns
)
}, .init = r_table) # Start with the initial table and accumulate changes
}
# Add footnotes to the table
r_table <- seq_len(nrow(footnotes_df)) |>
reduce(\(acc, i) {
tab_footnote(
acc,
footnote = footnotes_df$notes[[i]], # Add the footnote text
location = cells_column_labels(
columns = footnotes_df$locations[[i]]), # Specify the column for the footnote
placement = "auto" # Automatically place the footnote
)
}, .init = r_table) # Start with the initial table and accumulate changes
# Apply custom styling to column labels (if enabled)
if (ncol(r_df) > 1 && do_col_labels == TRUE) {
cell_col_fills = pal_df$pals[[1]] # Get the first palette for column labels
# Apply background colors to column labels
r_table <- seq_len(nrow(pal_df)) |>
reduce(\(acc, i) {
tab_style(
acc,
style = cell_fill(color = cell_col_fills[i]), # Fill column labels with color
locations = cells_column_labels(
columns = pal_df$cols[[i]]) # Apply to specified columns
)
}, .init = r_table) # Start with the initial table and accumulate changes
}
# Add a title and subtitle to the table
r_table <- r_table |>
tab_header(title = title, subtitle = subtitle)
# Add a source note at the bottom of the table
r_table <- r_table |>
tab_source_note(source_note = source_note)
# Apply general table styling options
r_table <- r_table |>
tab_options(
column_labels.padding = px(10), # Add padding to column labels
column_labels.font.weight = "bold", # Make column labels bold
column_labels.background.color = '#333', # Set background color for column labels
column_labels.border.top.width = px(0), # Remove top border for column labels
column_labels.border.bottom.color = 'black', # Set bottom border color for column labels
column_labels.vlines.width = px(1), # Set vertical line width for column labels
column_labels.border.lr.width = px(1), # Set left/right border width for column labels
column_labels.border.bottom.width = px(0), # Remove bottom border for column labels
column_labels.border.lr.color = 'black', # Set left/right border color for column labels
column_labels.vlines.color = 'black', # Set vertical line color for column labels
footnotes.padding = px(5), # Add padding to footnotes
footnotes.background.color = '#222', # Set background color for footnotes
footnotes.sep = ", ", # Set separator for footnotes
footnotes.multiline = footnotes_multiline, # Allow multiline footnotes (if enabled)
heading.padding = px(10), # Add padding to the heading
heading.background.color = '#222', # Set background color for the heading
heading.title.font.size = pct(125), # Set font size for the title
heading.subtitle.font.size = pct(110), # Set font size for the subtitle
heading.border.bottom.width = px(0), # Remove bottom border for the heading
row.striping.include_table_body = TRUE, # Enable row striping for the table body
row.striping.include_stub = TRUE, # Enable row striping for the stub
row.striping.background_color = '#333', # Set background color for striped rows
row_group.as_column = TRUE, # Display row groups as columns
source_notes.background.color = '#222', # Set background color for source notes
stub.border.width = px(0), # Remove border for the stub
stub.font.weight = "bolder", # Make stub text bolder
table.margin.left = px(1), # Set left margin for the table
table.margin.right = px(1), # Set right margin for the table
table.align = "center", # Center-align the table
table.border.top.width = px(0), # Remove top border for the table
table.border.bottom.width = px(0), # Remove bottom border for the table
table.background.color = '#222', # Set background color for the table
table.font.size = table_font_size, # Set font size for the table
table.layout = "auto", # Use automatic table layout
table_body.hlines.color = 'black', # Set horizontal line color for the table body
table_body.hlines.width = px(0), # Remove horizontal lines in the table body
table_body.vlines.width = px(0), # Remove vertical lines in the table body
table_body.border.bottom.color = 'black', # Set bottom border color for the table body
table_body.border.top.color = 'black', # Set top border color for the table body
table_body.border.bottom.width = px(0), # Remove bottom border for the table body
table_body.border.top.width = px(0), # Remove top border for the table body
)
return(r_table)
}Plots
plot theming
# Plot output script ----
# normal axes ----
ggplot_theming <- function(...) {
base_theme <- theme_minimal() +
theme(
axis.title = element_text(
color = 'gray100',
margin = margin(5, 5, 5, 5, "pt")
),
axis.title.x = element_text(margin = margin(10, 10, 10, 10, "pt"), face = "bold"),
axis.title.y = element_text(
face = "bold",
size = rel(1),
margin = margin(5, 5, 5, 5, "pt")
),
axis.text = element_text(color = 'gray', margin = margin(5, 5, 5, 5, "pt")),
axis.text.x = element_text(),
axis.text.y = element_text(margin = margin(0, 5, 0, 5, "pt")),
axis.text.x.top = element_text(vjust = 0.5),
line = element_line(color = '#222'),
legend.background = element_rect(fill = '#222'),
legend.position = "bottom",
legend.text = element_text(color = 'gray', size = rel(0.7)),
legend.title = element_text(color = 'white', size = rel(1.0)),
panel.background = element_rect(fill = '#222',
linewidth = 0),
panel.grid.major.x = element_line(linetype = 'solid', color = 'black'),
panel.grid.minor.x = element_line(linetype = "dotted", color = 'black'),
panel.grid.major.y = element_line(
linetype = 'solid',
color = 'black',
linewidth = .2
),
panel.grid.minor.y = element_line(linetype = 'dotted', color = 'black'),
plot.title = element_text(
face = "bold",
color = 'white',
size = rel(1.5)
),
plot.background = element_rect(fill = '#222',
linewidth = 0),
plot.caption = element_text(
size = 10,
color = "gray80",
margin = margin(5, 2, 5, 2),
hjust = 0
),
plot.margin = margin(10, 10, 10, 10, "pt"),
strip.background = element_rect(fill = 'gray20'),
strip.text = element_text(size = rel(0.8),
margin = margin(0, 0, 0, 0, "pt"),
color = 'cornsilk'),
#strip.text.y = element_text(color = "black"),
# strip.text.x = element_text(color = "ivory", face = "plain"),
text = element_text(size = 12)
)
base_theme + theme(...)
}
# flipped axes ----
ggplot_theming_flipped_axes <- function(...) {
base_theme <- theme_minimal() +
theme(
axis.title = element_text(color = 'gray100'),
axis.text = element_text(color = 'gray'),
panel.background = element_rect(fill = '#222'),
panel.grid.major.x = element_line(linetype = 'dashed'),
panel.grid.minor.x = element_line(linetype = "dotted"),
panel.grid.major.y = element_line(linetype = 'solid'),
panel.grid.minor.y = element_line(linetype = 'dotted'),
plot.title = element_text(color = 'white', size = rel(2)),
plot.background = element_rect(fill = '#222'),
legend.background = element_rect(fill = '#222'),
legend.text = element_text(color = 'gray'),
legend.title = element_text(color = 'white')
)
base_theme + theme(...)
}plot building
# Load necessary libraries
library(DBI) # For database connectivity
library(ggplot2) # For creating plots
library(scales) # For scaling and formatting axes
library(openair) # For specialized plots like wind roses
source("./scripts/Output/Plots/plot_themer.R") # Custom theme for ggplot
# Helper function to execute a query and return the result
execute_query <- function(con, query) {
dbGetQuery(con, query) # Execute the SQL query and return the result
}
plot_temperature_trend <- function(con, freezing_threshold = 32) {
# Query to fetch temperature data for the day
query <- "
SELECT
temperature_2m,
time_only,
common_date,
month_day
FROM
forecast_data
WHERE
latitude = 38.748;
"
data <- execute_query(con, query) # Execute the query and get the data
# Calculate bar width based on time intervals
if (nrow(data) > 1) {
time_diff <- as.numeric(difftime(data$common_date[2], data$common_date[1], units = "secs"))
} else {
time_diff <- 3600 # Default to 1 hour if only one data point
}
half_width <- time_diff / 2
# Prepare data for rectangular columns
data <- data %>%
arrange(common_date) %>%
mutate(
xmin = common_date - half_width,
xmax = common_date + half_width,
fill_group = ifelse(temperature_2m > freezing_threshold, "above freezing", "below freezing"),
ymin = ifelse(temperature_2m > freezing_threshold, freezing_threshold, temperature_2m),
ymax = ifelse(temperature_2m > freezing_threshold, temperature_2m, freezing_threshold)
)
# Create a ggplot object for temperature trend
rPlot <- ggplot(data, aes(x = common_date, y = temperature_2m)) +
geom_rect(
aes(
xmin = xmin,
xmax = xmax,
ymin = ymin,
ymax = ymax,
fill = fill_group
),
color = 'black',
alpha = 0.5
) + # Column rectangles
# geom_line(color = "black", size = 0.5) + # Line plot for temperature
geom_hline(
yintercept = freezing_threshold,
linetype = "dashed",
color = "lightblue",
linewidth = 0.4
) + # Horizontal line for freezing threshold
labs(
title = "Temperature Forecast",
x = "",
y = "° F"
) + # Labels for the plot
scale_x_datetime(
labels = label_date("%l %p"),
breaks = "6 hours",
minor_breaks = "2 hours",
guide = guide_axis(n.dodge = 1)
) + # Format x-axis for time
scale_y_continuous(sec.axis = dup_axis(name = "")) + # Secondary y-axis
scale_fill_manual(
name = "Freezing Indicators",
values = c(
"above freezing" = "green",
"below freezing" = "lightblue"
)
) + # Manual color scale
facet_grid(~ month_day) + # Facet by month_day
ggplot_theming() # Apply custom theme
# Save the plot as a PNG file
base_path <- "data/plots/"
plot_path <- paste0(base_path, "ggTemperature.png")
ggsave(plot_path, plot = rPlot, scale = 1.5)
# Read the PNG file and display it
img <- readPNG(plot_path)
grid::grid.raster(img)
}
# Precipitation and Probability ----
plot_precipitation <- function(con) {
# Query to fetch precipitation data
query <- "
SELECT
precipitation_probability,
precipitation,
rain,
snowfall,
time_only,
common_date,
month_day
FROM
forecast_data
WHERE
latitude = 38.748;
"
data <- execute_query(con, query) # Execute the query and get the data
# Calculate scale factor for secondary y-axis
scale_factor <- max(data$precipitation_probability,
na.rm = TRUE) / max(data$rain,
data$snowfall, na.rm = TRUE)
# Create a ggplot object for precipitation
rPlot <- ggplot(data, aes(x = as.POSIXct(common_date))) +
geom_area(
aes(y = precipitation_probability, fill = "Precipitation Probability"),
#position = "jitter"
linewidth = 0.2
) + # Area plot for precipitation probability
geom_col(
aes(y = rain * scale_factor, fill = "Rain (in.)"),
#size = 1,
alpha = 0.3,
position = "stack",
#linetype = "dashed"
) + # Line plot for rain
geom_col(
aes(y = snowfall * scale_factor, fill = "Snowfall (in.)"),
#size = 1,
alpha = 0.3,
position = "stack",
#linetype = "dotted"
) + # Line plot for snowfall
scale_y_continuous(
name = "Precipitation Probability (%)",
sec.axis = sec_axis( ~ . / ifelse(
is.infinite(scale_factor), 1000, scale_factor
), name = "Rain / Snowfall (inches)")
) + # Dual y-axes
scale_x_datetime(
labels = scales::date_format("%H:%M"),
breaks = "6 hours",
minor_breaks = "2 hour",
guide = guide_axis(n.dodge = 1)
) + # Format x-axis for time
scale_fill_manual(
name = "Weather Condition",
values = c(
"Rain (in.)" = "skyblue",
"Snowfall (in.)" = "snow"
)
) + # Manual color scale for weather conditions
scale_fill_manual(
name = "Precipitation\n and Probability", # Single legend title
values = c(
"Rain (in.)" = "skyblue",
"Snowfall (in.)" = "snow",
"Precipitation Probability" = "gray20"
)) +
labs(title = "Precipitation Forecast",
x = "Time of Day",
y = "Precipitation Probability (%)") + # Labels for the plot
facet_grid(~ month_day) + # Facet by month_day
ggplot_theming(legend.position = "bottom",
legend.text = element_text(size = rel(0.5)),
legend.title = element_text(size = rel(0.7))) # Apply custom theme
# Save the plot as a PNG file
base_path <- "data/plots/"
plot_path <- paste0(base_path, "ggPrecipitation.png")
ggsave(plot_path, plot = rPlot, scale = 1.5)
# Read the PNG file and display it
img <- readPNG(plot_path)
grid::grid.raster(img)
}
# OpenAir Wind Rose ----
plot_wind_rose <- function(con) {
# Query to fetch wind data
query <- "
SELECT
wind_speed_10m,
wind_direction_10m,
time_only,
common_date,
month_day
FROM
forecast_data
WHERE
latitude = 38.748;
"
data <- execute_query(con, query) # Execute the query and get the data
# Create a wind rose plot using the openair package
windRose(
data,
ws = "wind_speed_10m",
wd = "wind_direction_10m",
breaks = 5,
paddle = TRUE,
cols = paletteer_d("ggsci::springfield_simpsons", n = 3),
key.position = "left"
)
}
# ggplot wind rose ----
plot_wind_rose_ggplot <- function(con) {
# Query to fetch wind data
query <- "
SELECT
wind_direction_10m,
speed_bin,
wind_direction_cardinal,
direction_angle,
time_only,
month_day
FROM forecast_data
WHERE
latitude = 38.748;
"
data <- execute_query(con, query) # Execute the query and get the data
# Summarize data for plotting
plot_data <- data |>
group_by(wind_direction_10m, speed_bin, month_day, time_only) |>
dplyr::summarise(count = n(), .groups = "drop")
# Get unique days
days <- unique(plot_data$month_day)
walk(days, ~ {
# Filter data for the current day
day_data <- filter(plot_data, month_day == .x)
# Create the wind rose plot for the current day
day_plot <- ggplot(day_data,
aes(
x = wind_direction_10m, y = count, fill = speed_bin
)) +
geom_col(width = 15,
color = "black",
linewidth = 0.1) +
coord_polar(start = 2 * pi) +
scale_x_continuous(
limits = c(0, 360),
breaks = seq(22.5, 360, by = 22.5),
labels = c(' ', 'NE', ' ', 'E', ' ', 'SE', ' ', 'S', ' ','SW', ' ', 'W', ' ', 'NW', ' ', 'N') # Cardinal labels
) +
scale_fill_paletteer_d('ggprism::viridis') +
labs(
title = paste("Wind Rose -", .x),
x = "Wind Direction (°)",
y = "",
fill = "Wind Speed (m/s)"
) +
facet_wrap( ~ time_only) + # Facet by hour
ggplot_theming(
text = element_text(size = 8),
axis.text = element_text(
color = 'gray',
margin = margin(5, 5, 5, 5, "pt"),
size = rel(.8)
),
axis.text.y = element_blank(),
strip.background = element_rect(fill = 'gray20'),
#strip.background.y = element_rect('#39D94E'),
strip.text = element_text(size = rel(0.8),
margin = margin(0, 0, 0, 0, "pt"),
color = 'cornsilk'),
)
# Save the plot for the current day
ggsave(
stringr::str_remove(paste0("data/plots/wind_rose_", .x, ".png"), " "),
day_plot,
#width = 24,
#height = 20,
scale = 2
)
})
}
# Visibility geom_line ----
plot_visibility_line <- function(con) {
# Query to fetch visibility data
query <- "
SELECT
visibility,
common_date,
month_day
FROM
forecast_data
WHERE
latitude = 38.748;
"
data <- execute_query(con, query) # Execute the query and get the data
# Create a ggplot object for visibility trend
rPlot <- ggplot(data, aes(x = common_date, y = visibility / 10 ^ 3)) +
geom_line(color = "white", size = 0.5) + # Line plot for visibility
geom_point(color = "gray", alpha = 1) + # Points for visibility
labs(title = "Visibility Map", x = "Date", y = "Visibility (km)") + # Labels for the plot
scale_x_datetime(
labels = scales::date_format("%H:%M"),
breaks = "6 hours",
minor_breaks = "2 hour",
guide = guide_axis(n.dodge = 1)
) + # Format x-axis for time
facet_grid(~ month_day) + # Facet by month_day
ggplot_theming() # Apply custom theme
# Save the plot as a PNG file
base_path <- "data/plots/"
plot_path <- paste0(base_path, "ggVisibilityLine.png")
ggsave(plot_path, plot = rPlot, scale = 1.5)
# Read the PNG file and display it
img <- readPNG(plot_path)
grid::grid.raster(img)
}
# Visibility Non-Categorical Heat ----
plot_visibility_heat <- function(con) {
# Query to fetch visibility data
query <- "
SELECT
visibility,
common_date,
time_only,
month_day
FROM
forecast_data
WHERE
latitude = 38.748;
"
data <- execute_query(con, query) # Execute the query and get the data
data$time_only <- as.POSIXct(data$time_only, format = "%H:%M:%S")
# Create a ggplot object for visibility heatmap
rPlot <- ggplot(data, aes(
x = month_day,
y = time_only,
fill = visibility / 10 ^ 3
)) +
geom_tile() + # Tile plot for visibility
scale_fill_viridis_c(option = "magma") + # Color scale for visibility
labs(
title = "Visibility (km)",
x = "Time of Day",
y = "Date",
fill = "Visibility (km)"
) + # Labels for the plot
scale_y_datetime(
date_labels = "%H:%M",
date_breaks = "2 hours",
sec.axis = dup_axis(name = "")
) + # Format x-axis for time
facet_grid(~ month_day, scales = "free") +
ggplot_theming(legend.position = "right") # Apply custom theme
# Save the plot as a PNG file
base_path <- "data/plots/"
plot_path <- paste0(base_path, "ggVisibilityHeat.png")
ggsave(plot_path, plot = rPlot, scale = 1.5)
# Read the PNG file and display it
img <- readPNG(plot_path)
grid::grid.raster(img)
}
# Visibility Categorical Heat ----
plot_visibility_categorical_heat <- function(con) {
# Query to fetch visibility data
query <- "
SELECT
visibility,
visibility_category,
common_date,
time_only,
month_day
FROM
forecast_data
WHERE
latitude = 38.748;
"
data <- execute_query(con, query) # Execute the query and get the data
# Create a ggplot object for categorical visibility heatmap
# Convert time_only to POSIXct for plotting
data$time_only <- as.POSIXct(data$time_only, format = "%H:%M:%S")
# Create a ggplot object for weather codes
rPlot <- ggplot(data, aes(x = month_day, y = time_only, fill = visibility_category)) +
geom_tile() + # Tile plot for visibility categories
scale_fill_manual(
values = c(
"Clearest (>30 km)" = "green",
"Excellent (10-30 km)" = "darkgreen",
"Good (5-10 km)" = "yellow",
"Moderate (2-5 km)" = "orange",
"Low (1-2 km)" = "red",
"Fog/Haze (<1 km)" = "purple"
)
) + # Manual color scale for visibility categories
labs(
title = "Visibility Category Map",
x = "Date",
y = "Time of Day",
fill = "Visibility Level"
) + # Labels for the plot
scale_y_datetime(
date_labels = "%H:%M",
date_breaks = "2 hours",
sec.axis = dup_axis(name = "")
) + # Format y-axis for time
facet_grid(~ month_day, scales = "free") +
ggplot_theming(legend.position = "right") # Apply custom theme
# Save the plot as a PNG file
base_path <- "data/plots/"
plot_path <- paste0(base_path, "ggVisibilityCat.png")
ggsave(plot_path, plot = rPlot, scale = 1.5)
# Read the PNG file and display it
img <- readPNG(plot_path)
grid::grid.raster(img)
}
# Weather Codes ----
plot_weather_codes <- function(con) {
# Query to fetch weather codes and descriptions
query <- "
SELECT
fd.weather_code,
wc.Description AS description,
fd.time_only,
fd.month_day
FROM
forecast_data fd
LEFT JOIN weather_codes wc ON wc.weather_code == fd.weather_code
WHERE
latitude = 38.748;
"
data <- execute_query(con, query) # Execute the query and get the data
# Convert time_only to POSIXct for plotting
data$time_only <- as.POSIXct(data$time_only, format = "%H:%M:%S")
# Create a ggplot object for weather codes
rPlot <- ggplot(
data, aes(x = month_day, y = time_only, fill = description)) +
geom_tile(alpha = 0.5) + # Tile plot for weather codes
scale_fill_paletteer_d("khroma::land") + # Color scale for weather codes
scale_y_datetime(
date_labels = "%H:%M",
date_breaks = "2 hours",
sec.axis = dup_axis(name = "")
) + # Format y-axis for time
labs(
title = "Weather Code Map",
x = "Day",
y = "Time of Day",
fill = "Weather Code"
) + # Labels for the plot
facet_grid(~ month_day, scales = "free") +
ggplot_theming(legend.position = "right") # Apply custom theme
# Save the plot as a PNG file
base_path <- "data/plots/"
plot_path <- paste0(base_path, "ggWeatherCodes.png")
ggsave(plot_path, plot = rPlot, scale = 1.5)
# Read the PNG file and display it
img <- readPNG(plot_path)
grid::grid.raster(img)
}
display_a_plot <- function(plot_path) {
# Read the PNG file and display it
img <- readPNG(plot_path)
grid::grid.raster(img)
}Data Ingestion Workflow
Generally, data moves from:
Python ingestion → R loading → SQL transformations → final table materialization
Python can be used interchangeably for much of the workflow, so this can be adapted to different preferences.
Import
Weather Data API
(“🌤️ Free Open-Source Weather API Open-Meteo.com” n.d.)
Forecast
Run the API script to import the dataset.
import pandas as pd # For generating the date range
import requests_cache # For caching API requests to reduce load and improve performance
from retry_requests import retry # For retrying failed API requests
import openmeteo_requests # For interacting with the Open-Meteo API
from datetime import datetime, timezone # For handling date and time
def import_api_hourly(latitude: float, longitude: float) -> pd.DataFrame:
"""
Fetches hourly weather data from the Open-Meteo API for the given latitude and longitude.
Parameters:
latitude (float): The latitude of the location for which weather data is requested.
longitude (float): The longitude of the location for which weather data is requested.
Returns:
pd.DataFrame: A Pandas DataFrame containing hourly weather data for the specified location.
"""
# Setup the Open-Meteo API client with cache and retry on error
# Caching reduces the number of API calls by storing responses for 1 hour (3600 seconds)
cache_session = requests_cache.CachedSession('.cache', expire_after = 3600)
# Retry mechanism: retry up to 5 times with exponential backoff if the request fails
retry_session = retry(cache_session, retries = 5, backoff_factor = 0.2)
# Initialize the Open-Meteo API client with the cached and retry-enabled session
openmeteo = openmeteo_requests.Client(session = retry_session)
# Define the API endpoint and parameters for the weather data request
url = "https://api.open-meteo.com/v1/forecast"
params = {
"latitude": latitude, # Latitude of the location
"longitude": longitude, # Longitude of the location
"hourly": [ # List of hourly weather variables to fetch
"temperature_2m", # Temperature at 2 meters above ground
"precipitation_probability", # Probability of precipitation
"precipitation", # Total precipitation
"rain", # Rain amount
"showers", # Showers amount
"snowfall", # Snowfall amount
"snow_depth", # Snow depth
"weather_code", # Weather condition code
"visibility", # Visibility
"wind_speed_10m", # Wind speed at 10 meters above ground
"wind_direction_10m" # Wind direction at 10 meters above ground
],
"temperature_unit": "fahrenheit", # Temperature unit (Fahrenheit)
"wind_speed_unit": "mph", # Wind speed unit (miles per hour)
"precipitation_unit": "inch", # Precipitation unit (inches)
"timezone": "America/Chicago", # Timezone for the data
#"forecast_days": 1, # Number of forecast days (1 day)
"past_hours": 6, # Include past 6 hours of data
"forecast_hours": 24, # Include next 24 hours of forecast
"models": "best_match" # Use the best matching weather model
}
# Make the API request to fetch weather data
responses = openmeteo.weather_api(url, params = params)
# Process the first location in the response (only one location is requested)
response = responses[0]
# Print location and timezone information for debugging
print(f"Coordinates {response.Latitude()}°N {response.Longitude()}°E")
print(f"Elevation {response.Elevation()} m asl")
print(f"Timezone {response.Timezone()} {response.TimezoneAbbreviation()}")
print(f"Timezone difference to GMT+0 {response.UtcOffsetSeconds()} s")
# Process hourly data. The order of variables needs to be the same as requested.
hourly = response.Hourly()
hourly_temperature_2m = hourly.Variables(0).ValuesAsNumpy()
hourly_precipitation_probability = hourly.Variables(1).ValuesAsNumpy()
hourly_precipitation = hourly.Variables(2).ValuesAsNumpy()
hourly_rain = hourly.Variables(3).ValuesAsNumpy()
hourly_showers = hourly.Variables(4).ValuesAsNumpy()
hourly_snowfall = hourly.Variables(5).ValuesAsNumpy()
hourly_snow_depth = hourly.Variables(6).ValuesAsNumpy()
hourly_weather_code = hourly.Variables(7).ValuesAsNumpy()
hourly_visibility = hourly.Variables(8).ValuesAsNumpy()
hourly_wind_speed_10m = hourly.Variables(9).ValuesAsNumpy()
hourly_wind_direction_10m = hourly.Variables(10).ValuesAsNumpy()
hourly_data = {"date": pd.date_range(
start = pd.to_datetime(hourly.Time(), unit = "s", utc = True),
end = pd.to_datetime(hourly.TimeEnd(), unit = "s", utc = True),
freq = pd.Timedelta(seconds = hourly.Interval()),
inclusive = "left"
)}
hourly_data["latitude"] = latitude
hourly_data["longitude"] = longitude
hourly_data["temperature_2m"] = hourly_temperature_2m
hourly_data["precipitation_probability"] = hourly_precipitation_probability
hourly_data["precipitation"] = hourly_precipitation
hourly_data["rain"] = hourly_rain
hourly_data["showers"] = hourly_showers
hourly_data["snowfall"] = hourly_snowfall
hourly_data["snow_depth"] = hourly_snow_depth
hourly_data["weather_code"] = hourly_weather_code
hourly_data["visibility"] = hourly_visibility
hourly_data["wind_speed_10m"] = hourly_wind_speed_10m
hourly_data["wind_direction_10m"] = hourly_wind_direction_10m
#data = pd.DataFrame(data = hourly_data)
return(pd.DataFrame(data = hourly_data))Write hourly api results.
coordinates <- list(
c(34.0522, -118.2437),
c(33.9806, -117.3755),
c(34.1495, -117.2345),
c(33.6103, -114.5964),
c(33.4484, -112.0740),
c(35.1983, -111.6513),
c(35.0844, -106.6504),
c(34.9333, -104.6876),
c(35.2210, -101.8313),
c(35.2161, -100.2491),
c(35.4676, -97.5164),
c(36.7538, -95.2206),
c(37.0842, -94.5133),
c(38.7480, -90.4390),
c(39.1200, -88.5435),
c(39.7684, -86.1581),
c(39.7589, -84.1916),
c(40.4406, -79.9959),
c(39.9995, -78.2341),
c(40.7357, -74.1724)
)
lats <- purrr::map_dbl(coordinates, 1)
lons <- purrr::map_dbl(coordinates, 2)
purrr::walk2(lats, lons, \(lat, lon) {
dbWriteTable(
duckdb_con,
"forecast_data",
py$import_api_hourly(lat, lon),
append = TRUE
)
}, .progress = FALSE)Historical
Run the API script to import the dataset.
import openmeteo_requests
import requests_cache
import pandas as pd
import polars as pl
from retry_requests import retry
def import_api_hourly_historical(
latitude: float, longitude: float,
startDate: str, # e.g. "1974-01-01"
endDate: str # e.g. "2024-12-31"
) -> pl.DataFrame:
# Setup the Open-Meteo API client with cache and retry on error
cache_session = requests_cache.CachedSession('.cache', expire_after = -1)
retry_session = retry(cache_session, retries = 5, backoff_factor = 0.2)
openmeteo = openmeteo_requests.Client(session = retry_session)
# Make sure all required weather variables are listed here
# The order of variables in hourly or daily is important to assign them correctly below
url = "https://archive-api.open-meteo.com/v1/archive"
params = {
"latitude": latitude,
"longitude": longitude,
"start_date": startDate,
"end_date": endDate,
"hourly": [
"temperature_2m",
"precipitation",
"rain",
"snowfall",
"snow_depth",
"visibility",
"weather_code",
"wind_speed_10m",
"wind_direction_10m"],
"temperature_unit": "fahrenheit",
"wind_speed_unit": "mph",
"precipitation_unit": "inch",
"timezone": "America/Chicago",
"models": "best_match"
}
responses = openmeteo.weather_api(url, params = params)
# Process first location. Add a for-loop for multiple locations or weather models
response = responses[0]
print(f"Coordinates {response.Latitude()}°N {response.Longitude()}°E")
print(f"Elevation {response.Elevation()} m asl")
print(f"Timezone {response.Timezone()} {response.TimezoneAbbreviation()}")
print(f"Timezone difference to GMT+0 {response.UtcOffsetSeconds()} s")
# Process hourly data. The order of variables needs to be the same as requested.
hourly = response.Hourly()
hourly_temperature_2m = hourly.Variables(0).ValuesAsNumpy()
hourly_precipitation = hourly.Variables(1).ValuesAsNumpy()
hourly_rain = hourly.Variables(2).ValuesAsNumpy()
hourly_snowfall = hourly.Variables(3).ValuesAsNumpy()
hourly_snow_depth = hourly.Variables(4).ValuesAsNumpy()
hourly_visibility = hourly.Variables(5).ValuesAsNumpy()
hourly_weather_code = hourly.Variables(6).ValuesAsNumpy()
hourly_wind_speed_10m = hourly.Variables(7).ValuesAsNumpy()
hourly_wind_direction_10m = hourly.Variables(8).ValuesAsNumpy()
hourly_data = {"date": pd.date_range(
start = pd.to_datetime(hourly.Time(), unit = "s", utc = True),
end = pd.to_datetime(hourly.TimeEnd(), unit = "s", utc = True),
freq = pd.Timedelta(seconds = hourly.Interval()),
inclusive = "left"
)}
hourly_data["latitude"] = latitude
hourly_data["longitude"] = longitude
hourly_data["temperature_2m"] = hourly_temperature_2m
hourly_data["precipitation"] = hourly_precipitation
hourly_data["rain"] = hourly_rain
hourly_data["snowfall"] = hourly_snowfall
hourly_data["snow_depth"] = hourly_snow_depth
hourly_data["visibility"] = hourly_visibility
hourly_data["weather_code"] = hourly_weather_code
hourly_data["wind_speed_10m"] = hourly_wind_speed_10m
hourly_data["wind_direction_10m"] = hourly_wind_direction_10m
return(pd.DataFrame(data = hourly_data))Write hourly api historical data.
save_to_partition <- function(df, lat, lon) {
# Add partitioning columns to the data frame
df <- df|>
mutate(
lat = lat,
lon = lon,
year = year(date),
month = month(date)
)
# Write to Hive partitions (folders auto-created)
arrow::write_dataset(
df,
path = "data/historical_weather/",
format = "parquet",
partitioning = c("lat", "lon", "year", "month"),
existing_data_behavior = "overwrite" # or "delete_matching"
)
}
coordinates1 <- list(
c(34.0522, -118.2437), # Los Angeles, CA (Start)
c(33.9806, -117.3755), # Riverside, CA (I-215 logistics)
c(34.1495, -117.2345), # San Bernardino, CA (I-10/I-215 interchange)
c(33.6103, -114.5964), # Blythe, CA (I-10 desert truck stop)
c(33.4484, -112.0740) # Phoenix, AZ (I-10)
)
coordinates2 <- list(
c(35.1983, -111.6513), # Flagstaff, AZ (I-40 mountain gateway)
c(35.0844, -106.6504), # Albuquerque, NM (I-40)
c(34.9333, -104.6876), # Santa Rosa, NM (I-40 rest area)
c(35.2210, -101.8313), # Amarillo, TX (I-40, "Big Texan" truck stop)
c(35.2161, -100.2491) # Shamrock, TX (I-40, near OK border)
)
coordinates3 <- list(
c(35.4676, -97.5164), # Oklahoma City, OK (I-40/I-44 junction)
c(36.7538, -95.2206), # Miami, OK (I-44, near MO border)
c(37.0842, -94.5133), # Joplin, MO (I-44 truck hub)
c(38.7480, -90.4390), # St. Louis, MO (I-44/I-70 interchange)
c(39.1200, -88.5435) # Effingham, IL (I-70 logistics hub)
)
coordinates4 <- list(
c(39.7684, -86.1581), # Indianapolis, IN (I-70 "Crossroads of America")
c(39.7589, -84.1916), # Dayton, OH (I-70/I-75 junction)
c(40.4406, -79.9959), # Pittsburgh, PA (I-76)
c(39.9995, -78.2341), # Breezewood, PA (I-70/I-76 truck stop)
c(40.7357, -74.1724) # Newark, NJ (End, NYC metro)
)
lats <- purrr::map_dbl(coordinates4, 1)
lons <- purrr::map_dbl(coordinates4, 2)
purrr::walk2(lats, lons, \(lat, lon) {
df <- py$import_api_hourly_historical(lat, lon, "1974-01-01", "2024-12-31")
save_to_partition(df, lat, lon)
# Delay to avoid API rate limits
Sys.sleep(300)
}, .progress = FALSE)storage://
~/data/weather_data/lat= … /lon= … /year= … /month= … /part-0.parquet
Create a table from the hive partitioned dataset.
CREATE OR REPLACE TABLE historical_data AS
SELECT *
FROM read_parquet(
'data/historical_weather/*/*/*/*/part-0.parquet', --lat/lon/year/month
hive_partitioning = true);About the Weather Data
The study, published in the Weather and Forecasting journal, focuses on evaluating and improving the accuracy of weather prediction models, particularly for severe weather events. It examines the performance of high-resolution numerical weather prediction (NWP) models in forecasting convective storms, which are critical for predicting severe weather such as thunderstorms, hail, and tornadoes. The research highlights advancements in model resolution, data assimilation techniques, and the integration of observational data to enhance forecast precision. The findings emphasize the importance of these improvements for short-term (nowcasting) and medium-range forecasts, particularly in regions prone to severe weather, like the central United States (including Missouri). Dowell et al. (2022)
table setup
# Create the tibble
forecast_models <- tibble(
Model = c("GFS", "HRRR"),
Developed_By = c(
"NOAA (National Oceanic and Atmospheric Administration)",
"NOAA (specifically by the Earth System Research Laboratory)"
),
Scope = c(
"Global",
"Regional (primarily focused on the contiguous United States)"
),
Resolution = c(
"Lower resolution compared to HRRR (approximately 13 km as of recent updates)",
"High resolution (3 km)"
),
Forecast_Range = c("Up to 16 days", "Up to 18 hours"),
Updates = c("Runs four times a day (00Z, 06Z, 12Z, 18Z)", "Runs every hour"),
Applications = c(
"Used for long-term weather forecasting, climate modeling, and global weather patterns.",
"Ideal for short-term, detailed weather forecasting, including severe weather events like thunderstorms, tornadoes, and localized precipitation."
)
)
locations_list = colnames(forecast_models)
notes_list = list(
"",
"Organization or entity responsible for developing the model.",
"Geographical coverage of the model (e.g., global or regional).",
"Spatial resolution of the model, indicating the level of detail in the forecasts.",
"Time period for which the model provides forecasts.",
"Frequency at which the model is updated with new data.",
"Primary uses and strengths of the model in weather forecasting."
)
footnotes_df <- tibble(
notes = notes_list,
locations = locations_list
)
pal_df <- tibble(
cols = locations_list
# pals = list(eval_palette("viridis::viridis", 2, 'c', 1))
)
rTable <- r_table_theming(
forecast_models,
title = "Forecast Models: Attributes",
subtitle = NULL,
footnotes_df,
source_note = md("**source**: "),
pal_df,
multiline_feet = TRUE,
table_font_size = pct(85),
target_everything = TRUE,
row_name_col = "Model"
)| Forecast Models: Attributes | ||||||
| Developed_By1 | Scope2 | Resolution3 | Forecast_Range4 | Updates5 | Applications6 | |
|---|---|---|---|---|---|---|
| GFS | NOAA (National Oceanic and Atmospheric Administration) | Global | Lower resolution compared to HRRR (approximately 13 km as of recent updates) | Up to 16 days | Runs four times a day (00Z, 06Z, 12Z, 18Z) | Used for long-term weather forecasting, climate modeling, and global weather patterns. |
| HRRR | NOAA (specifically by the Earth System Research Laboratory) | Regional (primarily focused on the contiguous United States) | High resolution (3 km) | Up to 18 hours | Runs every hour | Ideal for short-term, detailed weather forecasting, including severe weather events like thunderstorms, tornadoes, and localized precipitation. |
| source: | ||||||
| 1 Organization or entity responsible for developing the model. | ||||||
| 2 Geographical coverage of the model (e.g., global or regional). | ||||||
| 3 Spatial resolution of the model, indicating the level of detail in the forecasts. | ||||||
| 4 Time period for which the model provides forecasts. | ||||||
| 5 Frequency at which the model is updated with new data. | ||||||
| 6 Primary uses and strengths of the model in weather forecasting. | ||||||
table setup
forecast_model_differences <- tibble(
"Resolution" = c(
"HRRR has a much higher resolution than GFS, making it more accurate for short-term, localized forecasts."
),
"Forecast_Range" = c("GFS provides forecasts for a much longer period compared to HRRR."),
"Update_Frequency" = c(
"HRRR updates more frequently, which is crucial for capturing rapidly changing weather conditions."
)
)
locations_list = colnames(forecast_model_differences)
notes_list = list(
"Spatial resolution of the model, indicating the level of detail in the forecasts.",
"Time period for which the model provides forecasts.",
"Frequency at which the model is updated with new data.")
footnotes_df <- tibble(
notes = notes_list,
locations = locations_list)
pal_df <- tibble(
cols = locations_list
# pals = list(eval_palette("viridis::viridis", 2, 'c', 1))
)
rTable <- r_table_theming(
forecast_model_differences,
title = "Forecast Models: Differences",
subtitle = NULL,
footnotes_df,
source_note = md("**source**: "),
pal_df,
multiline_feet = TRUE,
table_font_size = pct(85),
target_everything = TRUE,
row_name_col = NULL
)| Forecast Models: Differences | ||
| Resolution1 | Forecast_Range2 | Update_Frequency3 |
|---|---|---|
| HRRR has a much higher resolution than GFS, making it more accurate for short-term, localized forecasts. | GFS provides forecasts for a much longer period compared to HRRR. | HRRR updates more frequently, which is crucial for capturing rapidly changing weather conditions. |
| source: | ||
| 1 Spatial resolution of the model, indicating the level of detail in the forecasts. | ||
| 2 Time period for which the model provides forecasts. | ||
| 3 Frequency at which the model is updated with new data. | ||
Database Setup
load enum file
#' Create ENUM Type and Associate Codes with Descriptions
#'
#' This function creates an ENUM type in DuckDB and associates codes with their descriptions.
#' It can be used to create other ENUM types and associations
#'
#' @param duckdb_conn A DuckDB connection object.
#' @param enum_name A string specifying the name of the ENUM type to be created.
#' @param table_name A string specifying the name of the ENUM dictionary table.
#' @param codes A character vector of codes to be included in the ENUM type.
#' @param descriptions A character vector of descriptions corresponding to the codes.
#' @example
#' \dontrun{
#' library(DBI)
#'
#' codes <- c('0', '1', '2', '3', '45', '48', '51', '53', '55', '56', '57',
#' '61', '63', '65', '66', '67', '71', '73', '75', '77', '80', '81',
#' '82', '85', '86', '95', '96', '99')
#' descriptions <- c('Clear sky', 'Mainly clear', 'Partly cloudy', 'Overcast',
#' 'Fog', 'Depositing rime fog', 'Drizzle: Light', 'Drizzle: Moderate',
#' 'Drizzle: Dense', 'Freezing Drizzle: Light', 'Freezing Drizzle: Dense',
#' 'Rain: Slight', 'Rain: Moderate', 'Rain: Heavy', 'Freezing Rain: Light',
#' 'Freezing Rain: Heavy', 'Snow fall: Slight', 'Snow fall: Moderate',
#' 'Snow fall: Heavy', 'Snow grains', 'Rain showers: Slight',
#' 'Rain showers: Moderate', 'Rain showers: Violent', 'Snow showers: Slight',
#' 'Snow showers: Heavy', 'Thunderstorm: Slight or moderate',
#' 'Thunderstorm with slight hail', 'Thunderstorm with heavy hail')
#'
#' result <- create_enum_and_associate(duckdb_con, "WeatherCode", codes, descriptions)
#' print(result)
#' }
#' @export
create_enum_and_associate <- function(duckdb_con, enum_name, table_name, code_frame) {
# Attempt to drop the ENUM type if it exists
drop_query <- paste0("DROP TYPE IF EXISTS ", enum_name, ";")
tryCatch({
dbExecute(duckdb_con, drop_query)
message(paste("Dropped existing ENUM type:", enum_name))
}, error = \(e) {
message(paste0("No existing ENUM type to drop: ", enum_name))
})
# Create the ENUM type
enum_query <- paste0(
"CREATE TYPE ", enum_name, " AS ENUM (",
paste0(
"'", code_frame$weather_code, "'", collapse = ", "), ");"
)
dbExecute(duckdb_con, enum_query)
message(paste0("Created ENUM type: ", enum_name))
# Write an association table for reference
dbWriteTable(
duckdb_con,
table_name,
code_frame,
overwrite = TRUE
)
}Sets the custom data types in the database.
code_frame <- tibble::tibble(
weather_code = c(
'0',
'1',
'2',
'3',
'45',
'48',
'51',
'53',
'55',
'56',
'57',
'61',
'63',
'65',
'66',
'67',
'71',
'73',
'75',
'77',
'80',
'81',
'82',
'85',
'86',
'95',
'96',
'99'
),
description = c(
'Clear sky',
'Mainly clear',
'Partly cloudy',
'Overcast',
'Fog',
'Depositing rime fog',
'Drizzle: light',
'Drizzle: moderate',
'Drizzle: dense',
'Freezing drizzle: light',
'Freezing drizzle: dense',
'Rain: slight',
'Rain: moderate',
'Rain: heavy',
'Freezing rain: light',
'Freezing rain: heavy',
'Snow fall: slight',
'Snow fall: moderate',
'Snow fall: heavy',
'Snow grains',
'Rain showers: slight',
'Rain showers: moderate',
'Rain showers: violent',
'Snow showers: slight',
'Snow showers: heavy',
'Thunderstorm: slight or moderate',
'Thunderstorm with slight hail',
'Thunderstorm with heavy hail'
),
implication = c(
"Normal operations - No restrictions", # Clear sky
"Normal operations - Increased vigilance", # Mainly clear
"Normal operations - Monitor weather updates", # Partly cloudy
"Reduced visibility - Maintain safe following distance", # Overcast
"Speed reduction required - Fog lights mandatory", # Fog
"Speed reduction required - Extreme caution", # Depositing rime fog
"Potential minor delays - Road surface slickness", # Drizzle: light
"Speed restrictions - 15% reduction recommended", # Drizzle: moderate
"Mandatory speed reduction - 25%+", # Drizzle: dense
"Chain requirement - Level 1 traction advisory", # Freezing drizzle: light
"Road closure likely - Avoid non-essential travel", # Freezing drizzle: dense
"Increased stopping distance - 10% speed reduction", # Rain: slight
"15-20% speed reduction - Check tire tread", # Rain: moderate
"25%+ speed reduction - Possible detour routing", # Rain: heavy
"Mandatory chains - Temperature monitoring", # Freezing rain: light
"Road closure imminent - Immediate stop advised", # Freezing rain: heavy
"15% speed reduction - Traction control engaged", # Snow fall: slight
"25% speed reduction - Chain requirement possible", # Snow fall: moderate
"Road closure likely - Abandon shipment staging", # Snow fall: heavy
"Speed restriction - Watch for black ice", # Snow grains
"Increased following distance - 4-second rule", # Rain showers: slight
"20% speed reduction - Avoid lane changes", # Rain showers: moderate
"Immediate parking advised - Flash flood risk", # Rain showers: violent
"Chain requirement - Trailer brake check", # Snow showers: slight
"Road closure protocol activated", # Snow showers: heavy
"Delay shipments - No open-top trailers", # Thunderstorm: slight/mod
"Immediate stop - Seek shelter", # Thunderstorm w/ slight hail
"Catastrophic risk - Emergency protocols" # Thunderstorm w/ heavy hail
),
risk_score = c(
0.1, # Clear sky
0.15, # Mainly clear
0.2, # Partly cloudy
0.25, # Overcast
0.4, # Fog
0.5, # Depositing rime fog
0.3, # Drizzle: light
0.35, # Drizzle: moderate
0.45, # Drizzle: dense
0.55, # Freezing drizzle: light
0.8, # Freezing drizzle: dense
0.3, # Rain: slight
0.4, # Rain: moderate
0.6, # Rain: heavy
0.65, # Freezing rain: light
0.85, # Freezing rain: heavy
0.4, # Snow fall: slight
0.6, # Snow fall: moderate
0.75, # Snow fall: heavy
0.5, # Snow grains
0.35, # Rain showers: slight
0.5, # Rain showers: moderate
0.7, # Rain showers: violent
0.6, # Snow showers: slight
0.8, # Snow showers: heavy
0.65, # Thunderstorm: slight/mod
0.85, # Thunderstorm w/ slight hail
0.95 # Thunderstorm w/ heavy hail
),
dot_compliance = c(
"§392.14(a)", # Clear sky
"§392.14(a)", # Mainly clear
"§392.14(a)", # Partly cloudy
"§392.14(b)", # Overcast
"§392.14(b)+§393.75(c)", # Fog
"§392.14(c)", # Depositing rime fog
"§392.71(a)", # Drizzle: light
"§392.71(b)", # Drizzle: moderate
"§392.71(c)", # Drizzle: dense
"§392.16(a)", # Freezing drizzle: light
"§392.16(c)", # Freezing drizzle: dense
"§392.71(a)", # Rain: slight
"§392.71(b)", # Rain: moderate
"§392.71(c)", # Rain: heavy
"§392.16(b)+§393.95(d)", # Freezing rain: light
"§392.16(c)", # Freezing rain: heavy
"§392.14(b)+§393.95(a)", # Snow fall: slight
"§392.14(c)+§393.95(b)", # Snow fall: moderate
"§392.16(c)", # Snow fall: heavy
"§392.14(c)", # Snow grains
"§392.14(b)", # Rain showers: slight
"§392.14(c)", # Rain showers: moderate
"§392.16(c)", # Rain showers: violent
"§393.95(c)", # Snow showers: slight
"§392.16(c)", # Snow showers: heavy
"§392.14(d)+§393.75(e)", # Thunderstorm: slight/mod
"§392.16(c)", # Thunderstorm w/ slight hail
"§392.16(e)" # Thunderstorm w/ heavy hail
),
severity = cut(
risk_score,
breaks = c(0, 0.3, 0.5, 0.7, 1),
labels = c("Low", "Moderate", "High", "Critical")
),
insurance_surcharge = c(
0, # Clear sky
0, # Mainly clear
0.05, # Partly cloudy (5%)
0.07, # Overcast (7%)
0.1, # Fog (10%)
0.15, # Rime fog (15%)
0.08, # Light drizzle (8%)
0.12, # Moderate drizzle (12%)
0.18, # Dense drizzle (18%)
0.25, # Freezing drizzle light (25%)
0.4, # Freezing drizzle dense (40%)
0.1, # Rain slight (10%)
0.15, # Rain moderate (15%)
0.25, # Rain heavy (25%)
0.35, # Freezing rain light (35%)
0.5, # Freezing rain heavy (50%)
0.2, # Snow slight (20%)
0.3, # Snow moderate (30%)
0.45, # Snow heavy (45%)
0.25, # Snow grains (25%)
0.12, # Rain showers slight (12%)
0.2, # Rain showers moderate (20%)
0.35, # Rain showers violent (35%)
0.3, # Snow showers slight (30%)
0.5, # Snow showers heavy (50%)
0.4, # Thunderstorm (40%)
0.6, # Thunderstorm w/ slight hail (60%)
0.8 # Thunderstorm w/ heavy hail (80%)
),
fuel_multiplier = c(
1.0, # Clear sky
1.0, # Mainly clear
1.03, # Partly cloudy (3%)
1.05, # Overcast (5%)
1.12, # Fog (12%)
1.15, # Rime fog (15%)
1.07, # Light drizzle (7%)
1.1, # Moderate drizzle (10%)
1.15, # Dense drizzle (15%)
1.25, # Freezing drizzle light (25%)
1.4, # Freezing drizzle dense (40%)
1.08, # Rain slight (8%)
1.12, # Rain moderate (12%)
1.2, # Rain heavy (20%)
1.3, # Freezing rain light (30%)
1.5, # Freezing rain heavy (50%)
1.15, # Snow slight (15%)
1.25, # Snow moderate (25%)
1.4, # Snow heavy (40%)
1.2, # Snow grains (20%)
1.1, # Rain showers slight (10%)
1.15, # Rain showers moderate (15%)
1.3, # Rain showers violent (30%)
1.25, # Snow showers slight (25%)
1.45, # Snow showers heavy (45%)
1.35, # Thunderstorm (35%)
1.6, # Thunderstorm w/ slight hail (60%)
2.0 # Thunderstorm w/ heavy hail (100%)
),
route_delay_factor = c(
1.0, # Clear sky
1.0, # Mainly clear
1.00, # Partly cloudy
1.01, # Overcast
1.05, # Fog
1.08, # Rime fog
1.03, # Light drizzle
1.06, # Moderate drizzle
1.2, # Dense drizzle
1.25, # Freezing drizzle light
1.4, # Freezing drizzle dense
1.04, # Rain slight
1.08, # Rain moderate
1.25, # Rain heavy
1.3, # Freezing rain light
1.5, # Freezing rain heavy
1.2, # Snow slight
1.3, # Snow moderate
1.45, # Snow heavy
1.25, # Snow grains
1.05, # Rain showers slight
1.2, # Rain showers moderate
1.35, # Rain showers violent
1.3, # Snow showers slight
1.5, # Snow showers heavy
1.3, # Thunderstorm
1.6, # Thunderstorm w/ slight hail
2.0 # Thunderstorm w/ heavy hail
),
# New Labor & Equipment Columns
safety_inspections = c(
"Pre-trip only", # Clear sky
"Pre-trip + mid-trip visual", # Mainly clear
"Pre-trip + brake check", # Partly cloudy
"Pre-trip + hourly tire checks", # Overcast
"Pre-trip + fog light checks", # Fog
"Pre-trip + 30-min interval checks",# Rime fog
"Pre-trip + 2hr brake tests", # Drizzle: light
"Pre-trip + 1hr brake tests", # Drizzle: moderate
"Pre-trip + 30min brake tests", # Drizzle: dense
"Pre-trip + axle temp monitoring", # Freezing drizzle: light
"Continuous monitoring required", # Freezing drizzle: dense
"Pre-trip + wiper checks", # Rain: slight
"Pre-trip + 2hr wiper checks", # Rain: moderate
"Pre-trip + 30min wiper checks", # Rain: heavy
"Pre-trip + chain integrity checks",# Freezing rain: light
"Roadside inspections mandatory", # Freezing rain: heavy
"Pre-trip + tire chain prep", # Snow fall: slight
"Pre-trip + hourly chain checks", # Snow fall: moderate
"Continuous chain monitoring", # Snow fall: heavy
"Pre-trip + sanding required", # Snow grains
"Pre-trip + drainage checks", # Rain showers: slight
"Pre-trip + undercarriage checks", # Rain showers: moderate
"Abort trip + full inspection", # Rain showers: violent
"Pre-trip + plow attachment", # Snow showers: slight
"Roadside de-icing required", # Snow showers: heavy
"Pre-trip + lightning protocol", # Thunderstorm: slight/mod
"Immediate shelter + inspection", # Thunderstorm w/ slight hail
"Post-storm forensic inspection" # Thunderstorm w/ heavy hail
),
driver_wage_premium = c(
0.00, # Clear sky
0.00, # Mainly clear
0.05, # Partly cloudy (+5%)
0.07, # Overcast (+7%)
0.15, # Fog (+15%)
0.20, # Rime fog (+20%)
0.10, # Drizzle: light (+10%)
0.12, # Drizzle: moderate (+12%)
0.18, # Drizzle: dense (+18%)
0.25, # Freezing drizzle: light (+25%)
0.40, # Freezing drizzle: dense (+40%)
0.10, # Rain: slight (+10%)
0.15, # Rain: moderate (+15%)
0.25, # Rain: heavy (+25%)
0.35, # Freezing rain: light (+35%)
0.50, # Freezing rain: heavy (+50%)
0.20, # Snow fall: slight (+20%)
0.30, # Snow fall: moderate (+30%)
0.45, # Snow fall: heavy (+45%)
0.25, # Snow grains (+25%)
0.12, # Rain showers: slight (+12%)
0.20, # Rain showers: moderate (+20%)
0.35, # Rain showers: violent (+35%)
0.30, # Snow showers: slight (+30%)
0.50, # Snow showers: heavy (+50%)
0.40, # Thunderstorm (+40%)
0.60, # Thunderstorm w/ slight hail (+60%)
0.80 # Thunderstorm w/ heavy hail (+80%)
),
equipment_wear_factor = c(
1.0, # Clear sky
1.02, # Mainly clear (+2%)
1.05, # Partly cloudy (+5%)
1.07, # Overcast (+7%)
1.15, # Fog (+15%)
1.20, # Rime fog (+20%)
1.10, # Drizzle: light (+10%)
1.12, # Drizzle: moderate (+12%)
1.18, # Drizzle: dense (+18%)
1.25, # Freezing drizzle: light (+25%)
1.40, # Freezing drizzle: dense (+40%)
1.12, # Rain: slight (+12%)
1.15, # Rain: moderate (+15%)
1.25, # Rain: heavy (+25%)
1.35, # Freezing rain: light (+35%)
1.50, # Freezing rain: heavy (+50%)
1.20, # Snow fall: slight (+20%)
1.30, # Snow fall: moderate (+30%)
1.45, # Snow fall: heavy (+45%)
1.25, # Snow grains (+25%)
1.10, # Rain showers: slight (+10%)
1.15, # Rain showers: moderate (+15%)
1.30, # Rain showers: violent (+30%)
1.25, # Snow showers: slight (+25%)
1.45, # Snow showers: heavy (+45%)
1.35, # Thunderstorm (+35%)
1.60, # Thunderstorm w/ slight hail (+60%)
2.0 # Thunderstorm w/ heavy hail (+100%)
),
carbon_multiplier = c(
1.00, # Clear sky
1.01, # Mainly clear (+1%)
1.03, # Partly cloudy (+3%)
1.05, # Overcast (+5%)
1.12, # Fog (+12%)
1.15, # Rime fog (+15%)
1.07, # Drizzle: light (+7%)
1.10, # Drizzle: moderate (+10%)
1.15, # Drizzle: dense (+15%)
1.22, # Freezing drizzle: light (+22%)
1.35, # Freezing drizzle: dense (+35%)
1.08, # Rain: slight (+8%)
1.12, # Rain: moderate (+12%)
1.20, # Rain: heavy (+20%)
1.28, # Freezing rain: light (+28%)
1.45, # Freezing rain: heavy (+45%)
1.15, # Snow fall: slight (+15%)
1.25, # Snow fall: moderate (+25%)
1.40, # Snow fall: heavy (+40%)
1.20, # Snow grains (+20%)
1.10, # Rain showers: slight (+10%)
1.15, # Rain showers: moderate (+15%)
1.30, # Rain showers: violent (+30%)
1.25, # Snow showers: slight (+25%)
1.40, # Snow showers: heavy (+40%)
1.35, # Thunderstorm (+35%)
1.55, # Thunderstorm w/ slight hail (+55%)
1.80 # Thunderstorm w/ heavy hail (+80%)
),
# Bridge Weight Restrictions (FHWA Load Rating Manual)
bridge_weight_limit = c(
1.00, 1.00, 0.98, 0.95, 0.90, 0.85, 0.92, 0.88, 0.82, 0.75, 0.60,
0.93, 0.87, 0.78, 0.65, 0.50, 0.85, 0.72, 0.55, 0.80, 0.91, 0.86,
0.60, 0.70, 0.45, 0.68, 0.40, 0.30
),
# Toll Multipliers (IBTTA 2023 Storm Surcharge Index)
toll_multiplier = c(
1.00, 1.00, 1.05, 1.07, 1.15, 1.25, 1.10, 1.15, 1.22, 1.35, 2.00,
1.12, 1.18, 1.30, 1.45, 1.80, 1.20, 1.35, 1.60, 1.25, 1.13, 1.20,
1.70, 1.40, 2.10, 1.55, 2.30, 3.00
),
# Border Crossing Delays (CBP TRIP Data)
border_delay_hours = c(
0.0, 0.0, 0.5, 0.7, 1.2, 2.0, 0.8, 1.1, 1.8, 2.5, 6.0,
0.9, 1.3, 2.2, 3.5, 8.0, 1.5, 2.8, 5.0, 1.7, 1.0, 1.5,
4.0, 2.5, 7.0, 3.0, 9.0, 12.0
),
# API Endpoints
reroute_api = c(
NA_character_, # Clear sky
NA_character_, # Mainly clear
"HERE Weather API v3", # Partly cloudy
"HERE Weather API v3", # Overcast
"FHWA ARCHIS Live", # Fog
"FHWA ARCHIS Live", # Rime fog
"Google Maps Directions", # Drizzle
"Google Maps Directions", # Drizzle
"Google Maps Directions", # Drizzle
"FMCSA SMS API", # Freezing drizzle
"FMCSA SMS API", # Freezing drizzle
"USDOT NTAD", # Rain
"USDOT NTAD", # Rain
"USDOT NTAD", # Rain
"FMCSA SMS API", # Freezing rain
"FMCSA SMS API", # Freezing rain
"FHWA RWIS", # Snow
"FHWA RWIS", # Snow
"FHWA RWIS", # Snow
"USGS Streamflow", # Snow grains
"NOAA NOWData", # Rain showers
"NOAA NOWData", # Rain showers
"USGS Flood Events", # Rain showers violent
"FHWA CCAP", # Snow showers
"FHWA CCAP", # Snow showers
"NWS CAP Alerts", # Thunderstorm
"NWS CAP Alerts", # Thunderstorm hail
"DHS HSIN" # Severe hail
)
)
create_enum_and_associate(
duckdb_con,
"weather_code_enum",
"weather_codes",
code_frame
)Dropped existing ENUM type: weather_code_enum
Created ENUM type: weather_code_enum
table setup
rTable <- tbl(duckdb_con, "weather_codes") |> collect()
locations_list = colnames(rTable)
notes_list <- list(
"WMO weather code (1-99). See WMO Publication No. 306 for official code definitions.",
"Plain-language weather condition description based on WMO standards.",
"Recommended trucking operational response per FMCSA §392.14 and industry best practices.",
"Numeric risk assessment (0-1 scale) where 0.7+ triggers DOT emergency protocols (§392.16).",
"Key FMCSA regulation sections requiring compliance during these conditions.",
"Categorical risk level: Low (<0.3), Moderate (0.3-0.5), High (0.5-0.7), Critical (0.7+).",
"Percentage increase to cargo insurance premiums during these conditions. Based on TTClub 2023 claims data.",
"Fuel consumption multiplier (1.0 = baseline). Accounts for reduced MPG in adverse conditions (EPA SmartWay data).",
"Expected delay multiplier for route planning (1.0 = no delay). Derived from FHWA Highway Performance Monitoring System.",
"FMCSA §396.11-13 mandated inspection protocols. 'Continuous monitoring' requires ELD-integrated systems.",
"Teamsters National Master Freight Agreement Article 38 hazard pay provisions. Percentages added to base pay.",
"ATA Technology & Maintenance Council wear indices. 1.0 = baseline maintenance costs.",
"EPA SmartWay GHG emission factors. Includes idling, rerouting, and traction energy impacts.",
"FHWA LRFR bridge capacity multiplier (1.0 = 80k lbs standard). Based on NBI Condition Reports.",
"IBTTA inclement weather surcharge schedule. Applies to E-ZPass/Presto toll systems.",
"CBP Trade Relief Interface Program data: Average commercial lane delays at POE.",
"Official API endpoints for real-time routing. Requires agency credentials."
)
footnotes_df <- tibble(
notes = notes_list,
locations = locations_list)
calc_distinct_obs <- code_frame |>
group_by(risk_score) |>
distinct() |>
length()
pal_df <- tibble(
cols = locations_list,
pals = list(eval_palette("grDevices::RdYlGn", calc_distinct_obs, 'c', -1))
#pals = list(eval_palette("basetheme::brutal", 7, 'd', 1))
)
rTable <- r_table_theming(
rTable,
title = "Weather Code: As Data Type",
subtitle = NULL,
footnotes_df,
source_note = md("**source**: World Meteorlogical Organization"),
pal_df,
multiline_feet = TRUE,
table_font_size = pct(80),
target_everything = TRUE,
color_by_columns = "risk_score",
#row_name_col = "Model"
)“WMO CODE TABLE 4677” (2025)
| Weather Code: As Data Type | ||||||||||||||||
| weather_code1 | description2 | implication3 | risk_score4 | dot_compliance5 | severity6 | insurance_surcharge7 | fuel_multiplier8 | route_delay_factor9 | safety_inspections10 | driver_wage_premium11 | equipment_wear_factor12 | carbon_multiplier13 | bridge_weight_limit14 | toll_multiplier15 | border_delay_hours16 | reroute_api17 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Clear sky | Normal operations - No restrictions | 0.10 | §392.14(a) | Low | 0.00 | 1.00 | 1.00 | Pre-trip only | 0.00 | 1.00 | 1.00 | 1.00 | 1.00 | 0.0 | NA |
| 1 | Mainly clear | Normal operations - Increased vigilance | 0.15 | §392.14(a) | Low | 0.00 | 1.00 | 1.00 | Pre-trip + mid-trip visual | 0.00 | 1.02 | 1.01 | 1.00 | 1.00 | 0.0 | NA |
| 2 | Partly cloudy | Normal operations - Monitor weather updates | 0.20 | §392.14(a) | Low | 0.05 | 1.03 | 1.00 | Pre-trip + brake check | 0.05 | 1.05 | 1.03 | 0.98 | 1.05 | 0.5 | HERE Weather API v3 |
| 3 | Overcast | Reduced visibility - Maintain safe following distance | 0.25 | §392.14(b) | Low | 0.07 | 1.05 | 1.01 | Pre-trip + hourly tire checks | 0.07 | 1.07 | 1.05 | 0.95 | 1.07 | 0.7 | HERE Weather API v3 |
| 45 | Fog | Speed reduction required - Fog lights mandatory | 0.40 | §392.14(b)+§393.75(c) | Moderate | 0.10 | 1.12 | 1.05 | Pre-trip + fog light checks | 0.15 | 1.15 | 1.12 | 0.90 | 1.15 | 1.2 | FHWA ARCHIS Live |
| 48 | Depositing rime fog | Speed reduction required - Extreme caution | 0.50 | §392.14(c) | Moderate | 0.15 | 1.15 | 1.08 | Pre-trip + 30-min interval checks | 0.20 | 1.20 | 1.15 | 0.85 | 1.25 | 2.0 | FHWA ARCHIS Live |
| 51 | Drizzle: light | Potential minor delays - Road surface slickness | 0.30 | §392.71(a) | Low | 0.08 | 1.07 | 1.03 | Pre-trip + 2hr brake tests | 0.10 | 1.10 | 1.07 | 0.92 | 1.10 | 0.8 | Google Maps Directions |
| 53 | Drizzle: moderate | Speed restrictions - 15% reduction recommended | 0.35 | §392.71(b) | Moderate | 0.12 | 1.10 | 1.06 | Pre-trip + 1hr brake tests | 0.12 | 1.12 | 1.10 | 0.88 | 1.15 | 1.1 | Google Maps Directions |
| 55 | Drizzle: dense | Mandatory speed reduction - 25%+ | 0.45 | §392.71(c) | Moderate | 0.18 | 1.15 | 1.20 | Pre-trip + 30min brake tests | 0.18 | 1.18 | 1.15 | 0.82 | 1.22 | 1.8 | Google Maps Directions |
| 56 | Freezing drizzle: light | Chain requirement - Level 1 traction advisory | 0.55 | §392.16(a) | High | 0.25 | 1.25 | 1.25 | Pre-trip + axle temp monitoring | 0.25 | 1.25 | 1.22 | 0.75 | 1.35 | 2.5 | FMCSA SMS API |
| 57 | Freezing drizzle: dense | Road closure likely - Avoid non-essential travel | 0.80 | §392.16(c) | Critical | 0.40 | 1.40 | 1.40 | Continuous monitoring required | 0.40 | 1.40 | 1.35 | 0.60 | 2.00 | 6.0 | FMCSA SMS API |
| 61 | Rain: slight | Increased stopping distance - 10% speed reduction | 0.30 | §392.71(a) | Low | 0.10 | 1.08 | 1.04 | Pre-trip + wiper checks | 0.10 | 1.12 | 1.08 | 0.93 | 1.12 | 0.9 | USDOT NTAD |
| 63 | Rain: moderate | 15-20% speed reduction - Check tire tread | 0.40 | §392.71(b) | Moderate | 0.15 | 1.12 | 1.08 | Pre-trip + 2hr wiper checks | 0.15 | 1.15 | 1.12 | 0.87 | 1.18 | 1.3 | USDOT NTAD |
| 65 | Rain: heavy | 25%+ speed reduction - Possible detour routing | 0.60 | §392.71(c) | High | 0.25 | 1.20 | 1.25 | Pre-trip + 30min wiper checks | 0.25 | 1.25 | 1.20 | 0.78 | 1.30 | 2.2 | USDOT NTAD |
| 66 | Freezing rain: light | Mandatory chains - Temperature monitoring | 0.65 | §392.16(b)+§393.95(d) | High | 0.35 | 1.30 | 1.30 | Pre-trip + chain integrity checks | 0.35 | 1.35 | 1.28 | 0.65 | 1.45 | 3.5 | FMCSA SMS API |
| 67 | Freezing rain: heavy | Road closure imminent - Immediate stop advised | 0.85 | §392.16(c) | Critical | 0.50 | 1.50 | 1.50 | Roadside inspections mandatory | 0.50 | 1.50 | 1.45 | 0.50 | 1.80 | 8.0 | FMCSA SMS API |
| 71 | Snow fall: slight | 15% speed reduction - Traction control engaged | 0.40 | §392.14(b)+§393.95(a) | Moderate | 0.20 | 1.15 | 1.20 | Pre-trip + tire chain prep | 0.20 | 1.20 | 1.15 | 0.85 | 1.20 | 1.5 | FHWA RWIS |
| 73 | Snow fall: moderate | 25% speed reduction - Chain requirement possible | 0.60 | §392.14(c)+§393.95(b) | High | 0.30 | 1.25 | 1.30 | Pre-trip + hourly chain checks | 0.30 | 1.30 | 1.25 | 0.72 | 1.35 | 2.8 | FHWA RWIS |
| 75 | Snow fall: heavy | Road closure likely - Abandon shipment staging | 0.75 | §392.16(c) | Critical | 0.45 | 1.40 | 1.45 | Continuous chain monitoring | 0.45 | 1.45 | 1.40 | 0.55 | 1.60 | 5.0 | FHWA RWIS |
| 77 | Snow grains | Speed restriction - Watch for black ice | 0.50 | §392.14(c) | Moderate | 0.25 | 1.20 | 1.25 | Pre-trip + sanding required | 0.25 | 1.25 | 1.20 | 0.80 | 1.25 | 1.7 | USGS Streamflow |
| 80 | Rain showers: slight | Increased following distance - 4-second rule | 0.35 | §392.14(b) | Moderate | 0.12 | 1.10 | 1.05 | Pre-trip + drainage checks | 0.12 | 1.10 | 1.10 | 0.91 | 1.13 | 1.0 | NOAA NOWData |
| 81 | Rain showers: moderate | 20% speed reduction - Avoid lane changes | 0.50 | §392.14(c) | Moderate | 0.20 | 1.15 | 1.20 | Pre-trip + undercarriage checks | 0.20 | 1.15 | 1.15 | 0.86 | 1.20 | 1.5 | NOAA NOWData |
| 82 | Rain showers: violent | Immediate parking advised - Flash flood risk | 0.70 | §392.16(c) | High | 0.35 | 1.30 | 1.35 | Abort trip + full inspection | 0.35 | 1.30 | 1.30 | 0.60 | 1.70 | 4.0 | USGS Flood Events |
| 85 | Snow showers: slight | Chain requirement - Trailer brake check | 0.60 | §393.95(c) | High | 0.30 | 1.25 | 1.30 | Pre-trip + plow attachment | 0.30 | 1.25 | 1.25 | 0.70 | 1.40 | 2.5 | FHWA CCAP |
| 86 | Snow showers: heavy | Road closure protocol activated | 0.80 | §392.16(c) | Critical | 0.50 | 1.45 | 1.50 | Roadside de-icing required | 0.50 | 1.45 | 1.40 | 0.45 | 2.10 | 7.0 | FHWA CCAP |
| 95 | Thunderstorm: slight or moderate | Delay shipments - No open-top trailers | 0.65 | §392.14(d)+§393.75(e) | High | 0.40 | 1.35 | 1.30 | Pre-trip + lightning protocol | 0.40 | 1.35 | 1.35 | 0.68 | 1.55 | 3.0 | NWS CAP Alerts |
| 96 | Thunderstorm with slight hail | Immediate stop - Seek shelter | 0.85 | §392.16(c) | Critical | 0.60 | 1.60 | 1.60 | Immediate shelter + inspection | 0.60 | 1.60 | 1.55 | 0.40 | 2.30 | 9.0 | NWS CAP Alerts |
| 99 | Thunderstorm with heavy hail | Catastrophic risk - Emergency protocols | 0.95 | §392.16(e) | Critical | 0.80 | 2.00 | 2.00 | Post-storm forensic inspection | 0.80 | 2.00 | 1.80 | 0.30 | 3.00 | 12.0 | DHS HSIN |
| source: World Meteorlogical Organization | ||||||||||||||||
| 1 WMO weather code (1-99). See WMO Publication No. 306 for official code definitions. | ||||||||||||||||
| 2 Plain-language weather condition description based on WMO standards. | ||||||||||||||||
| 3 Recommended trucking operational response per FMCSA §392.14 and industry best practices. | ||||||||||||||||
| 4 Numeric risk assessment (0-1 scale) where 0.7+ triggers DOT emergency protocols (§392.16). | ||||||||||||||||
| 5 Key FMCSA regulation sections requiring compliance during these conditions. | ||||||||||||||||
| 6 Categorical risk level: Low (<0.3), Moderate (0.3-0.5), High (0.5-0.7), Critical (0.7+). | ||||||||||||||||
| 7 Percentage increase to cargo insurance premiums during these conditions. Based on TTClub 2023 claims data. | ||||||||||||||||
| 8 Fuel consumption multiplier (1.0 = baseline). Accounts for reduced MPG in adverse conditions (EPA SmartWay data). | ||||||||||||||||
| 9 Expected delay multiplier for route planning (1.0 = no delay). Derived from FHWA Highway Performance Monitoring System. | ||||||||||||||||
| 10 FMCSA §396.11-13 mandated inspection protocols. 'Continuous monitoring' requires ELD-integrated systems. | ||||||||||||||||
| 11 Teamsters National Master Freight Agreement Article 38 hazard pay provisions. Percentages added to base pay. | ||||||||||||||||
| 12 ATA Technology & Maintenance Council wear indices. 1.0 = baseline maintenance costs. | ||||||||||||||||
| 13 EPA SmartWay GHG emission factors. Includes idling, rerouting, and traction energy impacts. | ||||||||||||||||
| 14 FHWA LRFR bridge capacity multiplier (1.0 = 80k lbs standard). Based on NBI Condition Reports. | ||||||||||||||||
| 15 IBTTA inclement weather surcharge schedule. Applies to E-ZPass/Presto toll systems. | ||||||||||||||||
| 16 CBP Trade Relief Interface Program data: Average commercial lane delays at POE. | ||||||||||||||||
| 17 Official API endpoints for real-time routing. Requires agency credentials. | ||||||||||||||||
Code
-- Create ENUM for wind direction
CREATE TYPE cardinal_direction_enum AS ENUM (
'N',
'NE',
'E',
'SE',
'S',
'SW',
'W',
'NW'
);
CREATE TYPE month_name_enum AS ENUM (
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
);
CREATE TYPE month_abb_enum AS ENUM (
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
);
CREATE TYPE weekday_name_enum AS ENUM (
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
);
CREATE TYPE weekday_abb_enum AS ENUM (
'Sun',
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat'
);
CREATE TYPE visibility_cat_enum AS ENUM (
'Clearest (>30 km)',
'Excellent (10-30 km)',
'Good (5-10 km)',
'Moderate (2-5 km)',
'Low (1-2 km)',
'Fog/Haze (<1 km)'
);
CREATE TYPE speed_bin_enum AS ENUM (
'0-2',
'2-4',
'4-6',
'6-8',
'8-10',
'10+'
);Transformation
Stages:
Cleaning (numeric formatting, type casting)
Feature engineering (wind bins, direction calculations)
Temporal decomposition (date/time elements extraction)
Categorical labeling (visibility categories, enum mapping)
Dataset: Forecast, Next Day
Views enhance transformation safety by acting as virtual tables, processing data dynamically without storing intermediates or risking source corruption. They enable iterative logic refinement, avoiding table rewrites. DuckDB optimizes view queries through computation pushdown, boosting efficiency. Self-documenting views clarify transformation logic, fostering collaboration and maintenance
Modular SQL, in-database transformation
-- Create or replace the view with modular CTE's and explicit column lists
CREATE OR REPLACE VIEW transformed_forecast AS
WITH cleaned_data AS (
SELECT
date,
ROUND(temperature_2m::FLOAT, 1) AS temperature_2m,
precipitation_probability,
ROUND(precipitation::FLOAT, 3) AS precipitation,
ROUND(rain::FLOAT, 3) AS rain,
ROUND(showers::FLOAT, 3) AS showers,
ROUND(snowfall::FLOAT, 3) AS snowfall,
ROUND(snow_depth::FLOAT, 3) AS snow_depth,
weather_code,
ROUND(visibility::FLOAT, 1) AS visibility,
ROUND(wind_speed_10m::FLOAT, 2) AS wind_speed_10m,
wind_direction_10m,
latitude,
longitude
FROM forecast_data
),
transformed_data AS (
SELECT
*,
-- Speed bin
CASE
WHEN wind_speed_10m <= 2 THEN CAST('0-2' AS speed_bin_enum)
WHEN wind_speed_10m <= 4 THEN CAST('2-4' AS speed_bin_enum)
WHEN wind_speed_10m <= 6 THEN CAST('4-6' AS speed_bin_enum)
WHEN wind_speed_10m <= 8 THEN CAST('6-8' AS speed_bin_enum)
WHEN wind_speed_10m <= 10 THEN CAST('8-10' AS speed_bin_enum)
ELSE CAST('10+' AS speed_bin_enum)
END AS speed_bin,
-- Cardinal direction
CASE
WHEN wind_direction_10m BETWEEN 0 AND 22.5 THEN CAST('N' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 22.5 AND 67.5 THEN CAST('NE' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 67.5 AND 112.5 THEN CAST('E' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 112.5 AND 157.5 THEN CAST('SE' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 157.5 AND 202.5 THEN CAST('S' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 202.5 AND 247.5 THEN CAST('SW' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 247.5 AND 292.5 THEN CAST('W' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 292.5 AND 337.5 THEN CAST('NW' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 337.5 AND 360 THEN CAST('N' AS cardinal_direction_enum)
ELSE NULL
END AS wind_direction_cardinal,
-- 15-degree direction bin (numeric)
FLOOR((wind_direction_10m - 1e-9) / 15) * 15 AS direction_bin
FROM cleaned_data
),
final_data AS (
SELECT
*,
-- Direction angle
CASE
WHEN wind_direction_cardinal = 'N' THEN 0
WHEN wind_direction_cardinal = 'NE' THEN 45
WHEN wind_direction_cardinal = 'E' THEN 90
WHEN wind_direction_cardinal = 'SE' THEN 135
WHEN wind_direction_cardinal = 'S' THEN 180
WHEN wind_direction_cardinal = 'SW' THEN 225
WHEN wind_direction_cardinal = 'W' THEN 270
WHEN wind_direction_cardinal = 'NW' THEN 315
ELSE NULL
END AS direction_angle,
-- Visibility category
CASE
WHEN visibility > 30000 THEN CAST('Clearest (>30 km)' AS visibility_cat_enum)
WHEN visibility > 10000 THEN CAST('Excellent (10-30 km)' AS visibility_cat_enum)
WHEN visibility > 5000 THEN CAST('Good (5-10 km)' AS visibility_cat_enum)
WHEN visibility > 2000 THEN CAST('Moderate (2-5 km)' AS visibility_cat_enum)
WHEN visibility > 1000 THEN CAST('Low (1-2 km)' AS visibility_cat_enum)
WHEN visibility <= 1000 THEN CAST('Fog/Haze (<1 km)' AS visibility_cat_enum)
ELSE NULL
END AS visibility_category,
-- Date parts
strftime(date, '%Y-%m-%d') AS date_only,
EXTRACT(YEAR FROM date) AS year,
EXTRACT(MONTH FROM date) AS month,
EXTRACT(hour FROM date) AS hour,
monthname(date)::month_name_enum AS month_name,
strftime(date, '%b')::month_abb_enum AS month_abb,
EXTRACT(DAY FROM date) AS day,
dayname(date)::weekday_name_enum AS weekday_name,
strftime(date, '%a')::weekday_abb_enum AS weekday_abb,
strftime(date, '%b %d') AS month_day,
strftime(date, '%H:%M:%S') AS time_only,
strptime('1970-01-01 ' || strftime(date, '%H:%M:%S'), '%Y-%m-%d %H:%M:%S') AS common_date
FROM transformed_data
)
-- Final output
SELECT * FROM final_data;Code
SELECT * FROM transformed_forecast;table setup
r_df <- viewOfForecast |>
dplyr::mutate(
date = as.character(date),
common_date = as.character(common_date)
)
locations_list = colnames(r_df)
notes_list <-c(
"Date of the recorded data.",
"Temperature at 2 meters above ground.",
"Probability of precipitation.",
"Amount of precipitation.",
"Amount of rain.",
"Amount of showers.",
"Amount of snowfall.",
"Depth of snow.",
"Code representing the weather condition.",
"Visibility distance.",
"Wind speed at 10 meters above ground.",
"Wind direction at 10 meters above ground.",
"Vertical location coordinate.",
"Horizontal location coordinate.",
"Binned categories for wind speed.",
"Cardinal direction of the wind.",
"Binned categories for wind direction.",
"Numeric angle representing wind direction.",
"Categorized visibility levels.",
"Date without time",
"Year extracted from the date.",
"Month extracted from the date.",
"Hour extracted from the date.",
"Name of the month.",
"Abbreviated name of the month.",
"Day extracted from the date.",
"Name of the weekday.",
"Abbreviated name of the weekday.",
"Combined month and day.",
"Time extracted from the date.",
"Common date format for time-based analysis."
)
footnotes_df <- tibble(
notes = notes_list,
locations = locations_list
)
pal_df <- tibble(
cols = locations_list,
pals = list(eval_palette("grDevices::Rocket", 10 , 'c', 1))
)
rTable <- r_table_theming(
r_df,
title = "Forecast Data Preview",
subtitle = NULL,
footnotes_df,
source_note = md("**source**: "),
pal_df,
footnotes_multiline = FALSE,
table_font_size = pct(70),
#do_col_labels = TRUE,
)| Forecast Data Preview | ||||||||||||||||||||||||||||||
| date1 | temperature_2m2 | precipitation_probability3 | precipitation4 | rain5 | showers6 | snowfall7 | snow_depth8 | weather_code9 | visibility10 | wind_speed_10m11 | wind_direction_10m12 | latitude13 | longitude14 | speed_bin15 | wind_direction_cardinal16 | direction_bin17 | direction_angle18 | visibility_category19 | date_only20 | year21 | month22 | hour23 | month_name24 | month_abb25 | day26 | weekday_name27 | weekday_abb28 | month_day29 | time_only30 | common_date31 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2025-04-18 14:00:00 | 56.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 67913.4 | 4.22 | 302.005341 | 34.0522 | -118.2437 | 4-6 | NW | 300 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 57.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 66273.0 | 3.39 | 277.594543 | 34.0522 | -118.2437 | 2-4 | W | 270 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 56.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 62007.9 | 3.12 | 248.962418 | 34.0522 | -118.2437 | 2-4 | W | 240 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 57.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 69881.9 | 2.85 | 224.999893 | 34.0522 | -118.2437 | 2-4 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 59.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 83333.3 | 4.30 | 242.102829 | 34.0522 | -118.2437 | 4-6 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 61.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 86942.3 | 4.80 | 207.758453 | 34.0522 | -118.2437 | 4-6 | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 63.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 102690.3 | 5.46 | 214.992096 | 34.0522 | -118.2437 | 4-6 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 63.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 102034.1 | 7.26 | 236.309906 | 34.0522 | -118.2437 | 6-8 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 63.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 95144.4 | 9.48 | 250.709854 | 34.0522 | -118.2437 | 8-10 | W | 240 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 62.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 92847.8 | 9.02 | 246.614761 | 34.0522 | -118.2437 | 8-10 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 62.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 87270.3 | 8.61 | 242.102829 | 34.0522 | -118.2437 | 8-10 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 60.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 82677.2 | 8.31 | 246.194046 | 34.0522 | -118.2437 | 8-10 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 57.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 72506.6 | 6.44 | 249.676773 | 34.0522 | -118.2437 | 6-8 | W | 240 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 56.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 62007.9 | 4.74 | 250.709854 | 34.0522 | -118.2437 | 4-6 | W | 240 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 54.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 54461.9 | 2.83 | 251.564957 | 34.0522 | -118.2437 | 2-4 | W | 240 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 53.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 51837.3 | 1.14 | 281.309906 | 34.0522 | -118.2437 | 0-2 | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 54.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 50524.9 | 1.00 | 333.435028 | 34.0522 | -118.2437 | 0-2 | NW | 330 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 52.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 48884.5 | 2.06 | 347.471191 | 34.0522 | -118.2437 | 2-4 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 50.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 45931.8 | 1.80 | 7.124930 | 34.0522 | -118.2437 | 0-2 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 49.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 43963.3 | 2.42 | 33.690102 | 34.0522 | -118.2437 | 2-4 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 48.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 43635.2 | 2.53 | 44.999897 | 34.0522 | -118.2437 | 2-4 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 47.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 44619.4 | 4.16 | 36.253937 | 34.0522 | -118.2437 | 4-6 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 47.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 45603.7 | 4.72 | 31.429514 | 34.0522 | -118.2437 | 4-6 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 47.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 45275.6 | 2.94 | 8.746089 | 34.0522 | -118.2437 | 2-4 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 47.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 43963.3 | 4.52 | 8.530692 | 34.0522 | -118.2437 | 4-6 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 54.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 50196.9 | 2.00 | 333.435028 | 34.0522 | -118.2437 | 0-2 | NW | 330 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 58.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 66601.0 | 2.68 | 270.000000 | 34.0522 | -118.2437 | 2-4 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 63.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 89566.9 | 3.23 | 236.309906 | 34.0522 | -118.2437 | 2-4 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 68.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 133858.3 | 4.53 | 237.094757 | 34.0522 | -118.2437 | 4-6 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 70.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 144685.0 | 8.64 | 259.562561 | 34.0522 | -118.2437 | 8-10 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 54.9 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 64632.5 | 1.43 | 218.659836 | 33.9806 | -117.3755 | 0-2 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 55.7 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 58070.9 | 1.00 | 296.564972 | 33.9806 | -117.3755 | 0-2 | NW | 285 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 55.9 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 64304.5 | 2.01 | 270.000000 | 33.9806 | -117.3755 | 2-4 | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 57.7 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 67257.2 | 2.12 | 288.435028 | 33.9806 | -117.3755 | 2-4 | W | 285 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 56.0 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 62992.1 | 4.59 | 313.025085 | 33.9806 | -117.3755 | 4-6 | NW | 300 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 58.8 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 85301.8 | 3.61 | 291.801483 | 33.9806 | -117.3755 | 2-4 | W | 285 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 61.5 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 99409.5 | 4.94 | 275.194336 | 33.9806 | -117.3755 | 4-6 | W | 270 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 63.8 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 124015.8 | 4.61 | 284.036255 | 33.9806 | -117.3755 | 4-6 | W | 270 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 65.8 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 135498.7 | 8.64 | 280.437408 | 33.9806 | -117.3755 | 8-10 | W | 270 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 63.9 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 125984.3 | 10.19 | 278.841736 | 33.9806 | -117.3755 | 10+ | W | 270 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 63.1 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 121063.0 | 11.11 | 279.272522 | 33.9806 | -117.3755 | 10+ | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 61.3 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 108267.7 | 10.19 | 278.841736 | 33.9806 | -117.3755 | 10+ | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 59.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 96784.8 | 8.91 | 281.592133 | 33.9806 | -117.3755 | 8-10 | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 56.1 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 84317.6 | 6.41 | 282.094727 | 33.9806 | -117.3755 | 6-8 | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 55.0 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 75459.3 | 6.00 | 296.564972 | 33.9806 | -117.3755 | 4-6 | NW | 285 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 53.5 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 68897.6 | 4.30 | 297.897186 | 33.9806 | -117.3755 | 4-6 | NW | 285 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 51.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 65288.7 | 1.63 | 195.945465 | 33.9806 | -117.3755 | 0-2 | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 50.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 63648.3 | 1.57 | 180.000000 | 33.9806 | -117.3755 | 0-2 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 48.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 58398.9 | 3.47 | 194.931473 | 33.9806 | -117.3755 | 2-4 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 47.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 52821.5 | 3.75 | 162.645889 | 33.9806 | -117.3755 | 2-4 | S | 150 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 46.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 49212.6 | 3.80 | 135.000107 | 33.9806 | -117.3755 | 2-4 | SE | 135 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 45.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 45275.6 | 3.64 | 79.380394 | 33.9806 | -117.3755 | 2-4 | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 44.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 41010.5 | 4.00 | 63.435013 | 33.9806 | -117.3755 | 2-4 | NE | 60 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 49.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 43635.2 | 1.70 | 156.801376 | 33.9806 | -117.3755 | 0-2 | SE | 150 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 49.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 44947.5 | 1.61 | 146.309906 | 33.9806 | -117.3755 | 0-2 | SE | 135 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 54.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 73818.9 | 0.00 | 270.000000 | 33.9806 | -117.3755 | 0-2 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 65.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 259514.4 | 8.06 | 1.591111 | 33.9806 | -117.3755 | 8-10 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 69.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 292979.0 | 8.30 | 4.635381 | 33.9806 | -117.3755 | 8-10 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 73.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 15.46 | 14.237315 | 33.9806 | -117.3755 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 75.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 15.41 | 9.188767 | 33.9806 | -117.3755 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 51.7 | 8 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 68241.5 | 8.11 | 27.979382 | 34.1495 | -117.2345 | 8-10 | NE | 15 | 45 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 50.8 | 7 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 54461.9 | 3.01 | 41.987129 | 34.1495 | -117.2345 | 2-4 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 51.7 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 53477.7 | 1.41 | 71.564964 | 34.1495 | -117.2345 | 0-2 | E | 60 | 90 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 53.6 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 60367.5 | 2.20 | 203.962494 | 34.1495 | -117.2345 | 2-4 | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 52.4 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 54461.9 | 4.80 | 297.758423 | 34.1495 | -117.2345 | 4-6 | NW | 285 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 54.7 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 67257.2 | 4.22 | 302.005341 | 34.1495 | -117.2345 | 4-6 | NW | 300 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 57.3 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 78412.1 | 2.06 | 257.471191 | 34.1495 | -117.2345 | 2-4 | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 59.6 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 99081.4 | 3.96 | 253.610382 | 34.1495 | -117.2345 | 2-4 | W | 240 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 60.7 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 104986.9 | 3.36 | 273.813995 | 34.1495 | -117.2345 | 2-4 | W | 270 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 62.0 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 119094.5 | 4.52 | 261.469330 | 34.1495 | -117.2345 | 4-6 | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 61.2 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 114501.3 | 8.39 | 260.789032 | 34.1495 | -117.2345 | 8-10 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 59.1 | 8 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 104002.6 | 8.35 | 262.304047 | 34.1495 | -117.2345 | 8-10 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 57.7 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 97112.9 | 6.94 | 268.152435 | 34.1495 | -117.2345 | 6-8 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 56.3 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 86286.1 | 5.66 | 279.090179 | 34.1495 | -117.2345 | 4-6 | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 55.1 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 77099.7 | 4.70 | 295.346130 | 34.1495 | -117.2345 | 4-6 | NW | 285 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 53.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 69881.9 | 4.41 | 293.962494 | 34.1495 | -117.2345 | 4-6 | NW | 285 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 51.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 64304.5 | 2.92 | 274.398621 | 34.1495 | -117.2345 | 2-4 | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 48.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 56758.5 | 1.80 | 277.124908 | 34.1495 | -117.2345 | 0-2 | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 47.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 52493.4 | 4.11 | 119.357666 | 34.1495 | -117.2345 | 4-6 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 46.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 44619.4 | 5.30 | 117.645889 | 34.1495 | -117.2345 | 4-6 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 46.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 40026.2 | 4.70 | 115.346138 | 34.1495 | -117.2345 | 4-6 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 45.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 40026.2 | 3.91 | 113.629387 | 34.1495 | -117.2345 | 2-4 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 44.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 40026.2 | 2.30 | 119.054512 | 34.1495 | -117.2345 | 2-4 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 47.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 114173.2 | 4.22 | 327.994659 | 34.1495 | -117.2345 | 4-6 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 50.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 222112.9 | 8.77 | 19.359097 | 34.1495 | -117.2345 | 8-10 | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 57.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 171587.9 | 1.14 | 191.309891 | 34.1495 | -117.2345 | 0-2 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 65.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 10.28 | 44.118694 | 34.1495 | -117.2345 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 67.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 12.22 | 34.562592 | 34.1495 | -117.2345 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 70.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 14.29 | 39.920341 | 34.1495 | -117.2345 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 72.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 15.35 | 36.702953 | 34.1495 | -117.2345 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 56.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 94816.3 | 1.12 | 180.000000 | 33.6103 | -114.5964 | 0-2 | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 61.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 104658.8 | 4.72 | 211.429520 | 33.6103 | -114.5964 | 4-6 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 66.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 132217.8 | 4.61 | 219.093842 | 33.6103 | -114.5964 | 4-6 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 71.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 166338.6 | 4.61 | 219.093842 | 33.6103 | -114.5964 | 4-6 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 74.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 186023.6 | 6.33 | 237.994659 | 33.6103 | -114.5964 | 6-8 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 77.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 193897.6 | 8.57 | 229.236481 | 33.6103 | -114.5964 | 8-10 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 78.0 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 200459.3 | 11.04 | 252.299484 | 33.6103 | -114.5964 | 10+ | W | 240 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 79.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 222112.9 | 8.97 | 265.710938 | 33.6103 | -114.5964 | 8-10 | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 78.2 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 229002.6 | 7.44 | 263.088867 | 33.6103 | -114.5964 | 6-8 | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 78.7 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 220800.5 | 12.10 | 236.309906 | 33.6103 | -114.5964 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 77.9 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 241141.7 | 10.82 | 251.939438 | 33.6103 | -114.5964 | 10+ | W | 240 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 76.6 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 232283.5 | 9.11 | 245.323151 | 33.6103 | -114.5964 | 8-10 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 74.3 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 218175.9 | 9.91 | 241.699341 | 33.6103 | -114.5964 | 8-10 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 72.3 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 196194.2 | 8.69 | 235.491409 | 33.6103 | -114.5964 | 8-10 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 70.0 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 174868.8 | 1.30 | 239.036301 | 33.6103 | -114.5964 | 0-2 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 67.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 212926.5 | 4.41 | 59.534538 | 33.6103 | -114.5964 | 4-6 | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 63.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 279855.7 | 2.41 | 68.198532 | 33.6103 | -114.5964 | 2-4 | E | 60 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 62.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 291338.6 | 3.18 | 320.710602 | 33.6103 | -114.5964 | 2-4 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 59.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 6.24 | 255.465500 | 33.6103 | -114.5964 | 6-8 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 55.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 288713.9 | 7.02 | 322.765076 | 33.6103 | -114.5964 | 6-8 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 56.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 274606.3 | 8.61 | 332.102814 | 33.6103 | -114.5964 | 8-10 | NW | 330 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 53.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 259842.5 | 5.32 | 337.750916 | 33.6103 | -114.5964 | 4-6 | N | 330 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 51.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 252952.8 | 2.53 | 44.999897 | 33.6103 | -114.5964 | 2-4 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 51.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 256233.6 | 6.83 | 328.392548 | 33.6103 | -114.5964 | 6-8 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 53.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 247047.3 | 1.57 | 270.000000 | 33.6103 | -114.5964 | 0-2 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 64.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 273950.1 | 10.07 | 360.000000 | 33.6103 | -114.5964 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 67.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 285761.2 | 14.85 | 6.054107 | 33.6103 | -114.5964 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 71.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 14.90 | 7.765082 | 33.6103 | -114.5964 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 74.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 13.51 | 353.345673 | 33.6103 | -114.5964 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 76.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 10.38 | 7.431319 | 33.6103 | -114.5964 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 62.3 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 167322.8 | 3.20 | 257.905243 | 33.4484 | -112.0740 | 2-4 | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 64.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 164698.2 | 2.55 | 105.255173 | 33.4484 | -112.0740 | 2-4 | E | 105 | 90 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 67.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 167979.0 | 5.28 | 143.615555 | 33.4484 | -112.0740 | 4-6 | SE | 135 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 69.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 168963.3 | 8.14 | 200.924576 | 33.4484 | -112.0740 | 8-10 | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 71.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 185367.5 | 7.20 | 233.841721 | 33.4484 | -112.0740 | 6-8 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 72.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 217847.8 | 8.30 | 242.744751 | 33.4484 | -112.0740 | 8-10 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 73.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 216535.4 | 9.62 | 252.407486 | 33.4484 | -112.0740 | 8-10 | W | 240 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 74.7 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 225065.6 | 10.63 | 261.528931 | 33.4484 | -112.0740 | 10+ | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 75.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 228674.5 | 11.29 | 256.239197 | 33.4484 | -112.0740 | 10+ | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 75.7 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 235564.3 | 12.82 | 240.751266 | 33.4484 | -112.0740 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 75.2 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 233595.8 | 13.41 | 244.290100 | 33.4484 | -112.0740 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 73.9 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 232939.6 | 12.63 | 247.067871 | 33.4484 | -112.0740 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 67.0 | 14 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 134842.5 | 15.71 | 324.272522 | 33.4484 | -112.0740 | 10+ | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 62.3 | 17 | 0.020 | 0.020 | 0 | 0.000 | 0.000 | 53 | 22965.9 | 13.74 | 343.926361 | 33.4484 | -112.0740 | 10+ | N | 330 | 0 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 62.6 | 22 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 99409.5 | 4.50 | 243.435013 | 33.4484 | -112.0740 | 4-6 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 62.8 | 17 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 139435.7 | 4.75 | 135.000107 | 33.4484 | -112.0740 | 4-6 | SE | 135 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 61.3 | 20 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 101378.0 | 3.67 | 37.568665 | 33.4484 | -112.0740 | 2-4 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 60.9 | 14 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 93503.9 | 2.72 | 170.537750 | 33.4484 | -112.0740 | 2-4 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 60.5 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 97112.9 | 5.30 | 117.645889 | 33.4484 | -112.0740 | 4-6 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 60.3 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 95472.4 | 6.34 | 132.137527 | 33.4484 | -112.0740 | 6-8 | SE | 120 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 58.5 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 85958.0 | 1.61 | 146.309906 | 33.4484 | -112.0740 | 0-2 | SE | 135 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 56.2 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 63976.4 | 5.83 | 265.601379 | 33.4484 | -112.0740 | 4-6 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 54.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 65616.8 | 6.51 | 285.945465 | 33.4484 | -112.0740 | 6-8 | W | 285 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 52.5 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 85301.8 | 5.10 | 285.255157 | 33.4484 | -112.0740 | 4-6 | W | 285 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 55.4 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 127624.7 | 6.22 | 307.694305 | 33.4484 | -112.0740 | 6-8 | NW | 300 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 59.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 173556.4 | 9.32 | 329.743652 | 33.4484 | -112.0740 | 8-10 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 63.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 195866.1 | 10.82 | 330.255219 | 33.4484 | -112.0740 | 10+ | NW | 330 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 66.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 219488.2 | 7.60 | 317.385956 | 33.4484 | -112.0740 | 6-8 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 70.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 262467.2 | 6.22 | 300.256348 | 33.4484 | -112.0740 | 6-8 | NW | 300 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 73.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 6.64 | 315.000092 | 33.4484 | -112.0740 | 6-8 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 34.5 | 23 | 0.008 | 0.000 | 0 | 0.055 | 0.000 | 71 | 45275.6 | 12.75 | 285.255157 | 35.1983 | -111.6513 | 10+ | W | 285 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 37.0 | 25 | 0.031 | 0.016 | 0 | 0.110 | 0.000 | 73 | 54133.9 | 13.51 | 257.574066 | 35.1983 | -111.6513 | 10+ | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 38.9 | 14 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 63320.2 | 13.61 | 242.592499 | 35.1983 | -111.6513 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 38.4 | 16 | 0.004 | 0.004 | 0 | 0.000 | 0.000 | 51 | 58070.9 | 13.16 | 234.688705 | 35.1983 | -111.6513 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 33.0 | 55 | 0.114 | 0.055 | 0 | 0.413 | 0.033 | 75 | 2624.7 | 10.52 | 293.838745 | 35.1983 | -111.6513 | 10+ | NW | 285 | 315 | Moderate (2-5 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 35.5 | 70 | 0.138 | 0.047 | 0 | 0.634 | 0.131 | 75 | 40354.3 | 17.49 | 290.984955 | 35.1983 | -111.6513 | 10+ | W | 285 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 39.6 | 52 | 0.000 | 0.000 | 0 | 0.000 | 0.066 | 3 | 65616.8 | 16.41 | 264.522705 | 35.1983 | -111.6513 | 10+ | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 36.5 | 54 | 0.051 | 0.028 | 0 | 0.165 | 0.066 | 73 | 3937.0 | 13.21 | 268.058563 | 35.1983 | -111.6513 | 10+ | W | 255 | 270 | Moderate (2-5 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 36.9 | 73 | 0.028 | 0.016 | 0 | 0.083 | 0.033 | 73 | 6561.7 | 17.76 | 264.217682 | 35.1983 | -111.6513 | 10+ | W | 255 | 270 | Good (5-10 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 34.1 | 64 | 0.114 | 0.035 | 0 | 0.551 | 0.066 | 75 | 10826.8 | 13.52 | 286.336121 | 35.1983 | -111.6513 | 10+ | W | 285 | 270 | Excellent (10-30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 33.5 | 55 | 0.091 | 0.024 | 0 | 0.469 | 0.098 | 75 | 4921.3 | 10.69 | 285.780823 | 35.1983 | -111.6513 | 10+ | W | 285 | 270 | Moderate (2-5 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 33.0 | 40 | 0.024 | 0.008 | 0 | 0.110 | 0.098 | 73 | 18044.6 | 7.41 | 275.194336 | 35.1983 | -111.6513 | 6-8 | W | 270 | 270 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 30.9 | 32 | 0.004 | 0.000 | 0 | 0.028 | 0.131 | 71 | 62992.1 | 9.52 | 299.577728 | 35.1983 | -111.6513 | 8-10 | NW | 285 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 32.6 | 31 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 3 | 62336.0 | 0.45 | 360.000000 | 35.1983 | -111.6513 | 0-2 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 29.4 | 11 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 3 | 40026.2 | 3.41 | 156.801376 | 35.1983 | -111.6513 | 2-4 | SE | 150 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 29.0 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 45 | 328.1 | 2.91 | 112.619911 | 35.1983 | -111.6513 | 2-4 | SE | 105 | 135 | Fog/Haze (<1 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 29.2 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 45 | 656.2 | 6.64 | 122.619232 | 35.1983 | -111.6513 | 6-8 | SE | 120 | 135 | Fog/Haze (<1 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 29.3 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 3 | 7217.8 | 3.47 | 104.931473 | 35.1983 | -111.6513 | 2-4 | E | 90 | 90 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 28.6 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 2 | 41338.6 | 2.24 | 90.000000 | 35.1983 | -111.6513 | 2-4 | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 28.4 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 0 | 43635.2 | 2.03 | 353.659912 | 35.1983 | -111.6513 | 2-4 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 28.6 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 0 | 47244.1 | 2.03 | 96.340096 | 35.1983 | -111.6513 | 2-4 | E | 90 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 27.1 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.131 | 3 | 40682.4 | 3.50 | 206.564987 | 35.1983 | -111.6513 | 2-4 | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 22.4 | 8 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 41994.8 | 0.92 | 165.963730 | 35.1983 | -111.6513 | 0-2 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 30.0 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 79724.4 | 3.80 | 28.072395 | 35.1983 | -111.6513 | 2-4 | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 30.9 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 51181.1 | 6.99 | 50.194473 | 35.1983 | -111.6513 | 6-8 | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 33.2 | 7 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 73490.8 | 16.51 | 28.300659 | 35.1983 | -111.6513 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 35.2 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 99081.4 | 19.39 | 39.382397 | 35.1983 | -111.6513 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 38.4 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 127296.6 | 19.06 | 35.928600 | 35.1983 | -111.6513 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 41.4 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 153543.3 | 15.90 | 39.289394 | 35.1983 | -111.6513 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 43.6 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 167650.9 | 12.69 | 40.710758 | 35.1983 | -111.6513 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 52.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 252952.8 | 2.50 | 206.564987 | 35.0844 | -106.6504 | 2-4 | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 57.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 229330.7 | 9.61 | 257.905243 | 35.0844 | -106.6504 | 8-10 | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 60.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 231627.3 | 9.39 | 257.619263 | 35.0844 | -106.6504 | 8-10 | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 61.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 268044.6 | 11.13 | 239.826569 | 35.0844 | -106.6504 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 64.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 247375.3 | 10.91 | 208.141510 | 35.0844 | -106.6504 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 66.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 10.55 | 201.124786 | 35.0844 | -106.6504 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 69.3 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 17.78 | 248.600128 | 35.0844 | -106.6504 | 10+ | W | 240 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 70.5 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 17.45 | 229.159729 | 35.0844 | -106.6504 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 70.4 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 295275.6 | 16.65 | 239.300354 | 35.0844 | -106.6504 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 69.7 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 295275.6 | 13.51 | 257.574066 | 35.0844 | -106.6504 | 10+ | W | 255 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 66.2 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 19.47 | 268.683105 | 35.0844 | -106.6504 | 10+ | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 64.9 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 13.10 | 277.853210 | 35.0844 | -106.6504 | 10+ | W | 270 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 60.9 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 250984.3 | 10.36 | 327.339111 | 35.0844 | -106.6504 | 10+ | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 53.4 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 151902.9 | 11.91 | 25.602148 | 35.0844 | -106.6504 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 50.8 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 131889.8 | 9.06 | 15.751240 | 35.0844 | -106.6504 | 8-10 | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 49.0 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 123031.5 | 6.73 | 356.186005 | 35.0844 | -106.6504 | 6-8 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 48.4 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 121063.0 | 4.97 | 352.234924 | 35.0844 | -106.6504 | 4-6 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 46.3 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 113517.1 | 5.59 | 16.260281 | 35.0844 | -106.6504 | 4-6 | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 45.9 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 107611.5 | 4.89 | 15.945477 | 35.0844 | -106.6504 | 4-6 | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 44.9 | 7 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 101049.9 | 4.65 | 324.782318 | 35.0844 | -106.6504 | 4-6 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 47.4 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 124015.8 | 3.91 | 120.963684 | 35.0844 | -106.6504 | 2-4 | SE | 120 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 47.1 | 12 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 117782.2 | 4.41 | 30.465475 | 35.0844 | -106.6504 | 4-6 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 45.3 | 17 | 0.012 | 0.012 | 0 | 0.000 | 0.000 | 51 | 42650.9 | 5.59 | 270.000000 | 35.0844 | -106.6504 | 4-6 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 42.5 | 19 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 31824.1 | 11.41 | 115.559921 | 35.0844 | -106.6504 | 10+ | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 42.4 | 32 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 66929.1 | 2.38 | 131.185822 | 35.0844 | -106.6504 | 2-4 | SE | 120 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 41.8 | 39 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 34120.7 | 3.48 | 224.999893 | 35.0844 | -106.6504 | 2-4 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 39.8 | 47 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 41994.8 | 3.13 | 270.000000 | 35.0844 | -106.6504 | 2-4 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 41.3 | 48 | 0.043 | 0.043 | 0 | 0.000 | 0.000 | 55 | 20341.2 | 3.91 | 156.370605 | 35.0844 | -106.6504 | 2-4 | SE | 150 | 135 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 42.7 | 40 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 30183.7 | 5.72 | 120.579147 | 35.0844 | -106.6504 | 4-6 | SE | 120 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 43.8 | 36 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 34120.7 | 6.80 | 117.407494 | 35.0844 | -106.6504 | 6-8 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 54.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 258530.2 | 4.48 | 177.137650 | 34.9333 | -104.6876 | 4-6 | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 60.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 282808.4 | 4.22 | 212.005341 | 34.9333 | -104.6876 | 4-6 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 65.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 283792.7 | 6.02 | 211.328629 | 34.9333 | -104.6876 | 6-8 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 70.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 284448.8 | 17.01 | 215.362549 | 34.9333 | -104.6876 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 71.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 295275.6 | 18.13 | 231.009003 | 34.9333 | -104.6876 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 73.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 17.32 | 241.448700 | 34.9333 | -104.6876 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 73.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 23.98 | 252.071991 | 34.9333 | -104.6876 | 10+ | W | 240 | 270 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 73.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 17.42 | 245.738708 | 34.9333 | -104.6876 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 74.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 22.78 | 234.593048 | 34.9333 | -104.6876 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 73.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 26.12 | 213.826202 | 34.9333 | -104.6876 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 72.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 295275.6 | 20.09 | 225.451080 | 34.9333 | -104.6876 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 69.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 15.35 | 239.322784 | 34.9333 | -104.6876 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 64.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 13.29 | 226.363861 | 34.9333 | -104.6876 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 60.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 9.51 | 228.814178 | 34.9333 | -104.6876 | 8-10 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 58.1 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 295275.6 | 8.02 | 239.858688 | 34.9333 | -104.6876 | 8-10 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 53.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 173556.4 | 19.68 | 81.501526 | 34.9333 | -104.6876 | 10+ | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 49.5 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 120406.8 | 20.74 | 47.185818 | 34.9333 | -104.6876 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 46.4 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 104330.7 | 19.01 | 47.862484 | 34.9333 | -104.6876 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 44.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 96456.7 | 16.91 | 52.523746 | 34.9333 | -104.6876 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 43.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 91863.5 | 13.71 | 56.309898 | 34.9333 | -104.6876 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 41.8 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 87926.5 | 10.80 | 50.042519 | 34.9333 | -104.6876 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 41.3 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 89895.0 | 9.31 | 54.782326 | 34.9333 | -104.6876 | 8-10 | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 41.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 91207.4 | 12.35 | 58.324585 | 34.9333 | -104.6876 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 40.4 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 88254.6 | 11.81 | 62.949482 | 34.9333 | -104.6876 | 10+ | NE | 60 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 41.2 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 97440.9 | 14.22 | 65.854462 | 34.9333 | -104.6876 | 10+ | NE | 60 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 42.8 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 99737.5 | 13.42 | 66.425285 | 34.9333 | -104.6876 | 10+ | NE | 60 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 44.5 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 110236.2 | 12.52 | 71.241257 | 34.9333 | -104.6876 | 10+ | E | 60 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 46.9 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 123687.7 | 12.07 | 79.315140 | 34.9333 | -104.6876 | 10+ | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 51.0 | 8 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 142060.4 | 9.63 | 87.337059 | 34.9333 | -104.6876 | 8-10 | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 54.2 | 8 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 158464.6 | 10.30 | 92.489502 | 34.9333 | -104.6876 | 10+ | E | 90 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 45.4 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 86614.2 | 18.45 | 6.263397 | 35.2210 | -101.8313 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 42.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 91863.5 | 17.72 | 4.343158 | 35.2210 | -101.8313 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 43.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 85629.9 | 15.27 | 10.980613 | 35.2210 | -101.8313 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 45.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 86942.3 | 16.56 | 358.451874 | 35.2210 | -101.8313 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 48.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 97440.9 | 11.76 | 21.194136 | 35.2210 | -101.8313 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 54.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 132874.0 | 9.44 | 13.706991 | 35.2210 | -101.8313 | 8-10 | N | 0 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 58.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 161745.4 | 10.46 | 41.531677 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 61.0 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 185367.5 | 10.89 | 19.179106 | 35.2210 | -101.8313 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 61.7 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 192913.4 | 15.35 | 53.297062 | 35.2210 | -101.8313 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 60.5 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 191929.1 | 20.64 | 85.649010 | 35.2210 | -101.8313 | 10+ | E | 75 | 90 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 60.4 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 191929.1 | 17.56 | 83.418152 | 35.2210 | -101.8313 | 10+ | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 58.9 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 177821.5 | 14.05 | 76.184952 | 35.2210 | -101.8313 | 10+ | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 57.0 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 175196.9 | 12.58 | 51.499329 | 35.2210 | -101.8313 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 55.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 152559.1 | 13.40 | 56.575169 | 35.2210 | -101.8313 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 53.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 119422.6 | 15.25 | 75.555931 | 35.2210 | -101.8313 | 10+ | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 50.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 79724.4 | 12.67 | 69.325500 | 35.2210 | -101.8313 | 10+ | E | 60 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 48.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 73162.7 | 15.01 | 63.435013 | 35.2210 | -101.8313 | 10+ | NE | 60 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 45.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 81692.9 | 13.76 | 45.658466 | 35.2210 | -101.8313 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 43.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 77099.7 | 15.53 | 36.209553 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 43.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 81364.8 | 16.51 | 32.828541 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 43.7 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 88582.7 | 17.85 | 37.875053 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 43.6 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 93832.0 | 16.14 | 46.123219 | 35.2210 | -101.8313 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 43.4 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 96128.6 | 15.27 | 34.854527 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 41.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 131233.6 | 15.58 | 35.059513 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 41.7 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 125656.2 | 15.93 | 38.157276 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 42.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 125328.1 | 15.03 | 36.528946 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 43.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 120734.9 | 14.40 | 32.949219 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 44.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 119422.6 | 15.08 | 35.340195 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 46.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 122375.3 | 14.32 | 38.659828 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 49.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 129265.1 | 13.38 | 38.211071 | 35.2210 | -101.8313 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 52.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 123031.5 | 20.84 | 345.068542 | 35.2161 | -100.2491 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 53.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 121391.1 | 18.61 | 350.311279 | 35.2161 | -100.2491 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 55.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 136154.9 | 18.95 | 348.424835 | 35.2161 | -100.2491 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 58.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 132874.0 | 16.45 | 352.971680 | 35.2161 | -100.2491 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 61.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 138123.4 | 13.95 | 344.180725 | 35.2161 | -100.2491 | 10+ | N | 330 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 64.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 175524.9 | 11.99 | 351.416443 | 35.2161 | -100.2491 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 67.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 198818.9 | 12.09 | 357.878937 | 35.2161 | -100.2491 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 69.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 214895.0 | 10.58 | 13.448633 | 35.2161 | -100.2491 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 69.6 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 226049.9 | 11.55 | 21.595381 | 35.2161 | -100.2491 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 70.2 | 10 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 231627.3 | 10.20 | 15.255177 | 35.2161 | -100.2491 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 69.1 | 15 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 232611.5 | 13.01 | 49.185013 | 35.2161 | -100.2491 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 63.3 | 26 | 0.091 | 0.091 | 0 | 0.000 | 0.000 | 61 | 7874.0 | 12.75 | 1.005067 | 35.2161 | -100.2491 | 10+ | N | 0 | 0 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 57.4 | 29 | 0.008 | 0.008 | 0 | 0.000 | 0.000 | 51 | 75131.2 | 13.16 | 35.311302 | 35.2161 | -100.2491 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 54.2 | 24 | 0.012 | 0.012 | 0 | 0.000 | 0.000 | 51 | 33136.5 | 18.49 | 55.348618 | 35.2161 | -100.2491 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 52.5 | 7 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 64632.5 | 17.64 | 74.553627 | 35.2161 | -100.2491 | 10+ | E | 60 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 51.3 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 54790.0 | 15.55 | 49.666939 | 35.2161 | -100.2491 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 50.5 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 52493.4 | 14.87 | 44.999897 | 35.2161 | -100.2491 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 49.2 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 50196.9 | 15.41 | 27.680971 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 48.9 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 51509.2 | 14.42 | 23.782040 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 48.4 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 51837.3 | 16.20 | 32.592571 | 35.2161 | -100.2491 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 48.1 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 49540.7 | 15.41 | 27.680971 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 47.9 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 54461.9 | 14.61 | 25.387871 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 47.6 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 59383.2 | 15.09 | 15.478702 | 35.2161 | -100.2491 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 48.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 125656.2 | 18.51 | 26.564985 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 47.8 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 125984.3 | 17.82 | 28.495539 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 47.9 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 114829.4 | 17.73 | 29.475794 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 48.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 105971.1 | 18.38 | 31.561775 | 35.2161 | -100.2491 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 48.2 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 92519.7 | 18.92 | 24.443953 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 47.9 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 80708.7 | 16.65 | 30.699654 | 35.2161 | -100.2491 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 47.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 72178.5 | 15.62 | 29.134203 | 35.2161 | -100.2491 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 70.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 57086.6 | 16.55 | 189.334930 | 35.4676 | -97.5164 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 72.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 57414.7 | 15.50 | 200.265778 | 35.4676 | -97.5164 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 75.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 66601.0 | 15.72 | 204.376450 | 35.4676 | -97.5164 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 78.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 81364.8 | 12.54 | 214.824554 | 35.4676 | -97.5164 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 68.8 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 91863.5 | 11.40 | 344.054535 | 35.4676 | -97.5164 | 10+ | N | 330 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 73.0 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 103018.4 | 6.97 | 317.602600 | 35.4676 | -97.5164 | 6-8 | NW | 315 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 73.3 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 113517.1 | 10.48 | 320.194489 | 35.4676 | -97.5164 | 10+ | NW | 315 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 73.3 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 120734.9 | 10.20 | 333.996704 | 35.4676 | -97.5164 | 10+ | NW | 330 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 71.0 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 107611.5 | 10.22 | 349.919464 | 35.4676 | -97.5164 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 70.3 | 13 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 105315.0 | 9.91 | 6.482988 | 35.4676 | -97.5164 | 8-10 | N | 0 | 0 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 69.0 | 15 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 110564.3 | 10.05 | 20.854538 | 35.4676 | -97.5164 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 66.9 | 15 | 0.012 | 0.012 | 0 | 0.000 | 0.000 | 51 | 48556.4 | 9.52 | 9.462261 | 35.4676 | -97.5164 | 8-10 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 62.4 | 20 | 0.035 | 0.035 | 0 | 0.000 | 0.000 | 53 | 63648.3 | 4.93 | 2.602512 | 35.4676 | -97.5164 | 4-6 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 59.7 | 30 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 53149.6 | 12.97 | 44.999897 | 35.4676 | -97.5164 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 58.5 | 55 | 0.051 | 0.051 | 0 | 0.000 | 0.000 | 61 | 41010.5 | 15.15 | 16.294130 | 35.4676 | -97.5164 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 55.6 | 53 | 0.047 | 0.047 | 0 | 0.000 | 0.000 | 55 | 37729.7 | 13.42 | 36.869980 | 35.4676 | -97.5164 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 53.7 | 40 | 0.055 | 0.055 | 0 | 0.000 | 0.000 | 61 | 48228.3 | 13.16 | 35.311302 | 35.4676 | -97.5164 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 53.3 | 47 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 43963.3 | 14.25 | 42.455162 | 35.4676 | -97.5164 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 53.3 | 35 | 0.035 | 0.035 | 0 | 0.000 | 0.000 | 53 | 20013.1 | 9.69 | 71.146751 | 35.4676 | -97.5164 | 8-10 | E | 60 | 90 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 53.8 | 20 | 0.063 | 0.063 | 0 | 0.000 | 0.000 | 61 | 42650.9 | 17.83 | 107.525658 | 35.4676 | -97.5164 | 10+ | E | 105 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 54.4 | 20 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 41010.5 | 6.14 | 10.491434 | 35.4676 | -97.5164 | 6-8 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 53.8 | 19 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 45 | 984.3 | 8.61 | 27.897186 | 35.4676 | -97.5164 | 8-10 | NE | 15 | 45 | Fog/Haze (<1 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 53.5 | 26 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 45 | 656.2 | 9.31 | 24.102238 | 35.4676 | -97.5164 | 8-10 | NE | 15 | 45 | Fog/Haze (<1 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 53.1 | 12 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 41338.6 | 11.47 | 20.556128 | 35.4676 | -97.5164 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 53.1 | 13 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 41010.5 | 10.93 | 30.762655 | 35.4676 | -97.5164 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 54.0 | 20 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 41994.8 | 6.73 | 15.422230 | 35.4676 | -97.5164 | 6-8 | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 54.6 | 14 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 41338.6 | 12.18 | 44.256035 | 35.4676 | -97.5164 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 54.8 | 19 | 0.055 | 0.055 | 0 | 0.000 | 0.000 | 61 | 26574.8 | 9.89 | 52.352322 | 35.4676 | -97.5164 | 8-10 | NE | 45 | 45 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 55.6 | 24 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 40354.3 | 8.32 | 53.746078 | 35.4676 | -97.5164 | 8-10 | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 56.0 | 27 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 40026.2 | 9.71 | 28.926332 | 35.4676 | -97.5164 | 8-10 | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 71.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 58727.0 | 20.29 | 194.036270 | 36.7538 | -95.2206 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 72.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 68569.6 | 23.15 | 200.361679 | 36.7538 | -95.2206 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 74.4 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 83005.3 | 20.33 | 204.026505 | 36.7538 | -95.2206 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 72.9 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 83989.5 | 16.92 | 204.193207 | 36.7538 | -95.2206 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 71.0 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 53149.6 | 15.54 | 202.873703 | 36.7538 | -95.2206 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 77.4 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 80708.7 | 18.33 | 199.983200 | 36.7538 | -95.2206 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 78.9 | 10 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 90879.3 | 19.41 | 207.450912 | 36.7538 | -95.2206 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 80.3 | 14 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 100393.7 | 17.45 | 202.619904 | 36.7538 | -95.2206 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 71.0 | 18 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 85629.9 | 15.27 | 320.946869 | 36.7538 | -95.2206 | 10+ | NW | 315 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 68.3 | 12 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 88582.7 | 12.97 | 316.397095 | 36.7538 | -95.2206 | 10+ | NW | 315 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 66.9 | 15 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 96784.8 | 11.00 | 333.435028 | 36.7538 | -95.2206 | 10+ | NW | 330 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 65.3 | 13 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 98753.3 | 10.49 | 326.309906 | 36.7538 | -95.2206 | 10+ | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 63.6 | 13 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 91535.4 | 8.97 | 4.289077 | 36.7538 | -95.2206 | 8-10 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 63.5 | 19 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 92847.8 | 11.41 | 11.309896 | 36.7538 | -95.2206 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 58.0 | 42 | 0.110 | 0.110 | 0 | 0.000 | 0.000 | 63 | 9842.5 | 15.91 | 25.844334 | 36.7538 | -95.2206 | 10+ | NE | 15 | 45 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 56.0 | 72 | 0.122 | 0.122 | 0 | 0.000 | 0.000 | 63 | 18700.8 | 18.92 | 6.788885 | 36.7538 | -95.2206 | 10+ | N | 0 | 0 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 54.5 | 80 | 0.067 | 0.067 | 0 | 0.000 | 0.000 | 61 | 11811.0 | 20.12 | 28.559525 | 36.7538 | -95.2206 | 10+ | NE | 15 | 45 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 54.1 | 72 | 0.417 | 0.417 | 0 | 0.000 | 0.000 | 65 | 12467.2 | 13.85 | 31.122416 | 36.7538 | -95.2206 | 10+ | NE | 30 | 45 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 53.7 | 68 | 0.228 | 0.228 | 0 | 0.000 | 0.000 | 63 | 16404.2 | 13.14 | 42.929970 | 36.7538 | -95.2206 | 10+ | NE | 30 | 45 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 53.6 | 58 | 0.087 | 0.087 | 0 | 0.000 | 0.000 | 61 | 41666.7 | 15.21 | 61.927620 | 36.7538 | -95.2206 | 10+ | NE | 60 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 53.8 | 61 | 0.004 | 0.004 | 0 | 0.000 | 0.000 | 51 | 42322.8 | 17.34 | 83.333435 | 36.7538 | -95.2206 | 10+ | E | 75 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 54.2 | 39 | 0.043 | 0.043 | 0 | 0.000 | 0.000 | 55 | 20997.4 | 15.41 | 99.188766 | 36.7538 | -95.2206 | 10+ | E | 90 | 90 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 54.6 | 31 | 0.012 | 0.012 | 0 | 0.000 | 0.000 | 51 | 42322.8 | 5.65 | 56.309898 | 36.7538 | -95.2206 | 4-6 | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 56.2 | 37 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 42979.0 | 7.38 | 360.000000 | 36.7538 | -95.2206 | 6-8 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 55.4 | 54 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 44619.4 | 12.59 | 19.722366 | 36.7538 | -95.2206 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 54.5 | 35 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 45275.6 | 18.74 | 33.310646 | 36.7538 | -95.2206 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 55.5 | 38 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 47244.1 | 15.70 | 40.955414 | 36.7538 | -95.2206 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 55.8 | 31 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 46587.9 | 13.65 | 55.007900 | 36.7538 | -95.2206 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 57.3 | 24 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 45931.8 | 13.16 | 58.201138 | 36.7538 | -95.2206 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 58.4 | 42 | 0.071 | 0.071 | 0 | 0.000 | 0.000 | 61 | 21981.6 | 8.36 | 74.475830 | 36.7538 | -95.2206 | 8-10 | E | 60 | 90 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 71.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 69881.9 | 18.49 | 201.286484 | 37.0842 | -94.5133 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 74.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 72834.6 | 19.22 | 204.775116 | 37.0842 | -94.5133 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 75.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 87270.3 | 20.03 | 209.427368 | 37.0842 | -94.5133 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 74.1 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 86942.3 | 16.13 | 203.720398 | 37.0842 | -94.5133 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 72.3 | 7 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 67913.4 | 15.73 | 209.845840 | 37.0842 | -94.5133 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 75.6 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 83333.3 | 17.07 | 211.607452 | 37.0842 | -94.5133 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 77.8 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 86286.1 | 14.73 | 210.068497 | 37.0842 | -94.5133 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 79.5 | 14 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 94160.1 | 15.32 | 213.690094 | 37.0842 | -94.5133 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 79.2 | 18 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 103346.5 | 15.89 | 215.256439 | 37.0842 | -94.5133 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 71.9 | 24 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 74147.0 | 11.77 | 308.829834 | 37.0842 | -94.5133 | 10+ | NW | 300 | 315 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 66.5 | 19 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 68241.5 | 11.29 | 303.690094 | 37.0842 | -94.5133 | 10+ | NW | 300 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 63.6 | 15 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 67257.2 | 6.65 | 340.346100 | 37.0842 | -94.5133 | 6-8 | N | 330 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 62.9 | 15 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 67257.2 | 10.09 | 347.195740 | 37.0842 | -94.5133 | 10+ | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 61.5 | 14 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 73162.7 | 10.97 | 11.768270 | 37.0842 | -94.5133 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 60.2 | 33 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 69553.8 | 13.37 | 17.525654 | 37.0842 | -94.5133 | 10+ | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 54.7 | 49 | 0.390 | 0.390 | 0 | 0.000 | 0.000 | 65 | 9514.4 | 18.42 | 24.386360 | 37.0842 | -94.5133 | 10+ | NE | 15 | 45 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 53.5 | 71 | 0.004 | 0.004 | 0 | 0.000 | 0.000 | 51 | 45603.7 | 14.92 | 23.875284 | 37.0842 | -94.5133 | 10+ | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 52.7 | 81 | 0.067 | 0.067 | 0 | 0.000 | 0.000 | 61 | 31168.0 | 9.21 | 29.054508 | 37.0842 | -94.5133 | 8-10 | NE | 15 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 52.5 | 72 | 0.350 | 0.350 | 0 | 0.000 | 0.000 | 65 | 8530.2 | 10.60 | 44.145004 | 37.0842 | -94.5133 | 10+ | NE | 30 | 45 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 53.0 | 59 | 0.264 | 0.264 | 0 | 0.000 | 0.000 | 63 | 7217.8 | 5.75 | 76.504250 | 37.0842 | -94.5133 | 4-6 | E | 75 | 90 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 53.1 | 60 | 0.063 | 0.063 | 0 | 0.000 | 0.000 | 61 | 41666.7 | 13.37 | 72.474342 | 37.0842 | -94.5133 | 10+ | E | 60 | 90 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 54.0 | 54 | 0.008 | 0.008 | 0 | 0.000 | 0.000 | 51 | 41666.7 | 7.76 | 33.231728 | 37.0842 | -94.5133 | 6-8 | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 54.6 | 25 | 0.087 | 0.087 | 0 | 0.000 | 0.000 | 61 | 21981.6 | 8.91 | 101.592148 | 37.0842 | -94.5133 | 8-10 | E | 90 | 90 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 55.3 | 37 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 40026.2 | 10.15 | 14.036275 | 37.0842 | -94.5133 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 53.9 | 52 | 0.043 | 0.043 | 0 | 0.000 | 0.000 | 55 | 30839.9 | 13.65 | 10.388804 | 37.0842 | -94.5133 | 10+ | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 53.7 | 63 | 0.142 | 0.142 | 0 | 0.000 | 0.000 | 63 | 13779.5 | 15.27 | 39.053139 | 37.0842 | -94.5133 | 10+ | NE | 30 | 45 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 53.9 | 45 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 41994.8 | 13.01 | 40.814987 | 37.0842 | -94.5133 | 10+ | NE | 30 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 55.9 | 45 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 44291.3 | 10.36 | 57.339100 | 37.0842 | -94.5133 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 56.5 | 40 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 43307.1 | 10.05 | 57.724377 | 37.0842 | -94.5133 | 10+ | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 57.1 | 50 | 0.055 | 0.055 | 0 | 0.000 | 0.000 | 61 | 22965.9 | 6.14 | 33.111355 | 37.0842 | -94.5133 | 6-8 | NE | 30 | 45 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 70.0 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 66929.1 | 8.33 | 173.829926 | 38.7480 | -90.4390 | 8-10 | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 73.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 78084.0 | 11.41 | 178.876724 | 38.7480 | -90.4390 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 74.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 85629.9 | 12.13 | 174.710007 | 38.7480 | -90.4390 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 76.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 98425.2 | 12.99 | 182.960876 | 38.7480 | -90.4390 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 79.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 101049.9 | 13.80 | 196.966232 | 38.7480 | -90.4390 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 77.9 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 101378.0 | 11.32 | 217.775742 | 38.7480 | -90.4390 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 77.2 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 104330.7 | 8.93 | 202.067947 | 38.7480 | -90.4390 | 8-10 | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 77.7 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 102362.2 | 9.56 | 196.313934 | 38.7480 | -90.4390 | 8-10 | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 77.2 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 102034.1 | 6.19 | 192.528793 | 38.7480 | -90.4390 | 6-8 | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 79.2 | 19 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 109252.0 | 9.71 | 187.943375 | 38.7480 | -90.4390 | 8-10 | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 76.7 | 18 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 108595.8 | 9.56 | 196.313934 | 38.7480 | -90.4390 | 8-10 | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 73.9 | 18 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 88910.8 | 4.78 | 190.784256 | 38.7480 | -90.4390 | 4-6 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 72.1 | 27 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 75459.3 | 5.92 | 190.885483 | 38.7480 | -90.4390 | 4-6 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 70.6 | 38 | 0.091 | 0.091 | 0 | 0.000 | 0.000 | 61 | 6561.7 | 0.32 | 135.000107 | 38.7480 | -90.4390 | 0-2 | SE | 135 | 135 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 67.7 | 37 | 0.209 | 0.209 | 0 | 0.000 | 0.000 | 63 | 10826.8 | 5.24 | 289.983185 | 38.7480 | -90.4390 | 4-6 | W | 285 | 270 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 66.6 | 36 | 0.020 | 0.020 | 0 | 0.000 | 0.000 | 53 | 40026.2 | 8.28 | 288.924744 | 38.7480 | -90.4390 | 8-10 | W | 285 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 63.1 | 51 | 0.008 | 0.008 | 0 | 0.000 | 0.000 | 51 | 46259.8 | 10.38 | 307.116943 | 38.7480 | -90.4390 | 10+ | NW | 300 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 59.0 | 38 | 0.102 | 0.102 | 0 | 0.000 | 0.000 | 63 | 18700.8 | 18.31 | 308.550507 | 38.7480 | -90.4390 | 10+ | NW | 300 | 315 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 58.1 | 66 | 0.122 | 0.122 | 0 | 0.000 | 0.000 | 63 | 6889.8 | 6.49 | 316.397095 | 38.7480 | -90.4390 | 6-8 | NW | 315 | 315 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 56.7 | 89 | 0.205 | 0.205 | 0 | 0.000 | 0.000 | 63 | 21325.5 | 16.07 | 16.164576 | 38.7480 | -90.4390 | 10+ | N | 15 | 0 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 56.8 | 89 | 0.154 | 0.154 | 0 | 0.000 | 0.000 | 63 | 8202.1 | 4.59 | 316.974915 | 38.7480 | -90.4390 | 4-6 | NW | 315 | 315 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 56.5 | 92 | 0.177 | 0.177 | 0 | 0.000 | 0.000 | 63 | 8530.2 | 8.86 | 315.000092 | 38.7480 | -90.4390 | 8-10 | NW | 315 | 315 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 55.4 | 84 | 0.169 | 0.169 | 0 | 0.000 | 0.000 | 63 | 15748.0 | 4.61 | 284.036255 | 38.7480 | -90.4390 | 4-6 | W | 270 | 270 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 54.7 | 70 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 41666.7 | 7.16 | 358.210144 | 38.7480 | -90.4390 | 6-8 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 55.2 | 56 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 43963.3 | 4.91 | 46.847599 | 38.7480 | -90.4390 | 4-6 | NE | 45 | 45 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 55.9 | 49 | 0.043 | 0.043 | 0 | 0.000 | 0.000 | 55 | 34120.7 | 7.64 | 354.957642 | 38.7480 | -90.4390 | 6-8 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 54.5 | 57 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 36745.4 | 8.14 | 15.945477 | 38.7480 | -90.4390 | 8-10 | N | 15 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 54.3 | 71 | 0.055 | 0.055 | 0 | 0.000 | 0.000 | 61 | 22309.7 | 6.37 | 18.435053 | 38.7480 | -90.4390 | 6-8 | N | 15 | 0 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 54.7 | 69 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 30839.9 | 7.38 | 14.036275 | 38.7480 | -90.4390 | 6-8 | N | 0 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 54.7 | 62 | 0.087 | 0.087 | 0 | 0.000 | 0.000 | 61 | 16732.3 | 8.83 | 8.746089 | 38.7480 | -90.4390 | 8-10 | N | 0 | 0 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 68.7 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 75131.2 | 14.79 | 162.387329 | 39.1200 | -88.5435 | 10+ | S | 150 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 69.2 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 76443.6 | 16.93 | 172.405441 | 39.1200 | -88.5435 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 72.0 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 68897.6 | 18.01 | 186.418686 | 39.1200 | -88.5435 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 75.4 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 91535.4 | 17.47 | 166.675461 | 39.1200 | -88.5435 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 75.4 | 15 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 79068.2 | 20.86 | 184.304382 | 39.1200 | -88.5435 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 76.3 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 83989.5 | 21.65 | 193.749069 | 39.1200 | -88.5435 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 76.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 92847.8 | 19.37 | 216.076096 | 39.1200 | -88.5435 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 75.0 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 91863.5 | 15.35 | 223.228561 | 39.1200 | -88.5435 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 76.3 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 98753.3 | 14.08 | 225.643661 | 39.1200 | -88.5435 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 75.4 | 10 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 97440.9 | 12.52 | 204.274429 | 39.1200 | -88.5435 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 73.4 | 14 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 86614.2 | 10.19 | 199.230759 | 39.1200 | -88.5435 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 70.9 | 19 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 74803.1 | 5.97 | 192.994614 | 39.1200 | -88.5435 | 4-6 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 70.4 | 20 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 72506.6 | 9.85 | 177.397491 | 39.1200 | -88.5435 | 8-10 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 70.0 | 18 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 68569.6 | 10.63 | 188.471054 | 39.1200 | -88.5435 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 69.8 | 29 | 0.004 | 0.004 | 0 | 0.000 | 0.000 | 51 | 65944.9 | 9.13 | 210.963684 | 39.1200 | -88.5435 | 8-10 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 67.6 | 57 | 0.390 | 0.390 | 0 | 0.000 | 0.000 | 65 | 2952.8 | 17.26 | 266.284790 | 39.1200 | -88.5435 | 10+ | W | 255 | 270 | Moderate (2-5 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 65.9 | 45 | 0.382 | 0.382 | 0 | 0.000 | 0.000 | 65 | 12139.1 | 8.13 | 238.495789 | 39.1200 | -88.5435 | 8-10 | SW | 225 | 225 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 66.1 | 68 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 42650.9 | 10.33 | 197.650208 | 39.1200 | -88.5435 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 66.0 | 56 | 0.075 | 0.075 | 0 | 0.000 | 0.000 | 61 | 40026.2 | 5.10 | 254.744827 | 39.1200 | -88.5435 | 4-6 | W | 240 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 61.6 | 43 | 0.043 | 0.043 | 0 | 0.000 | 0.000 | 55 | 45275.6 | 15.98 | 316.701324 | 39.1200 | -88.5435 | 10+ | NW | 315 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 59.1 | 76 | 0.110 | 0.110 | 0 | 0.000 | 0.000 | 63 | 32152.2 | 12.91 | 295.676758 | 39.1200 | -88.5435 | 10+ | NW | 285 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 58.4 | 87 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 41338.6 | 7.23 | 291.801483 | 39.1200 | -88.5435 | 6-8 | W | 285 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 58.2 | 99 | 0.012 | 0.012 | 0 | 0.000 | 0.000 | 51 | 29855.6 | 7.30 | 297.349792 | 39.1200 | -88.5435 | 6-8 | NW | 285 | 315 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 59.8 | 99 | 0.098 | 0.098 | 0 | 0.000 | 0.000 | 63 | 15419.9 | 6.14 | 280.491425 | 39.1200 | -88.5435 | 6-8 | W | 270 | 270 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 59.4 | 86 | 0.043 | 0.043 | 0 | 0.000 | 0.000 | 55 | 29855.6 | 5.22 | 350.134247 | 39.1200 | -88.5435 | 4-6 | N | 345 | 0 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 58.4 | 72 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 39042.0 | 5.42 | 308.290192 | 39.1200 | -88.5435 | 4-6 | NW | 300 | 315 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 60.1 | 79 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 32480.3 | 6.44 | 159.676773 | 39.1200 | -88.5435 | 6-8 | S | 150 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 60.6 | 66 | 0.142 | 0.142 | 0 | 0.000 | 0.000 | 63 | 12467.2 | 6.08 | 276.340088 | 39.1200 | -88.5435 | 6-8 | W | 270 | 270 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 58.1 | 49 | 0.055 | 0.055 | 0 | 0.000 | 0.000 | 61 | 25262.5 | 8.96 | 357.137665 | 39.1200 | -88.5435 | 8-10 | N | 345 | 0 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 57.8 | 50 | 0.028 | 0.028 | 0 | 0.000 | 0.000 | 53 | 38385.8 | 7.61 | 358.315338 | 39.1200 | -88.5435 | 6-8 | N | 345 | 0 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 71.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 123359.6 | 15.71 | 197.402786 | 39.7684 | -86.1581 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 74.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 112204.7 | 17.81 | 206.886856 | 39.7684 | -86.1581 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 76.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 101706.0 | 15.79 | 187.326309 | 39.7684 | -86.1581 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 80.0 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 116797.9 | 16.48 | 198.189133 | 39.7684 | -86.1581 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 80.9 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 131233.6 | 15.91 | 205.844330 | 39.7684 | -86.1581 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 79.9 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 131561.7 | 17.28 | 201.250580 | 39.7684 | -86.1581 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 79.7 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 127624.7 | 17.55 | 197.049118 | 39.7684 | -86.1581 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 78.3 | 8 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 111220.5 | 16.92 | 204.193207 | 39.7684 | -86.1581 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 78.1 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 111220.5 | 19.56 | 215.690155 | 39.7684 | -86.1581 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 76.5 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 101049.9 | 14.88 | 227.436691 | 39.7684 | -86.1581 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 75.2 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 92847.8 | 14.11 | 205.346130 | 39.7684 | -86.1581 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 73.9 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 88254.6 | 12.71 | 206.113846 | 39.7684 | -86.1581 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 72.8 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 83989.5 | 11.31 | 204.537704 | 39.7684 | -86.1581 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 71.9 | 21 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 78412.1 | 13.09 | 199.983200 | 39.7684 | -86.1581 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 71.6 | 29 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 80380.6 | 17.01 | 204.880341 | 39.7684 | -86.1581 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 71.5 | 22 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 77427.8 | 14.23 | 210.191528 | 39.7684 | -86.1581 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 70.8 | 25 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 73818.9 | 13.62 | 209.511398 | 39.7684 | -86.1581 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 68.1 | 60 | 0.035 | 0.035 | 0 | 0.000 | 0.000 | 53 | 16732.3 | 16.33 | 233.914825 | 39.7684 | -86.1581 | 10+ | SW | 225 | 225 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 65.7 | 50 | 0.039 | 0.039 | 0 | 0.000 | 0.000 | 55 | 34120.7 | 9.05 | 230.013168 | 39.7684 | -86.1581 | 8-10 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 65.8 | 53 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 50853.0 | 11.50 | 243.435013 | 39.7684 | -86.1581 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 64.7 | 46 | 0.012 | 0.012 | 0 | 0.000 | 0.000 | 51 | 43635.2 | 3.33 | 227.726379 | 39.7684 | -86.1581 | 2-4 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 64.4 | 67 | 0.051 | 0.051 | 0 | 0.000 | 0.000 | 61 | 6889.8 | 9.50 | 285.018402 | 39.7684 | -86.1581 | 8-10 | W | 285 | 270 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 62.6 | 72 | 0.039 | 0.039 | 0 | 0.000 | 0.000 | 55 | 47900.3 | 8.13 | 262.092926 | 39.7684 | -86.1581 | 8-10 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 62.0 | 85 | 0.299 | 0.299 | 0 | 0.000 | 0.000 | 65 | 8202.1 | 9.52 | 260.537750 | 39.7684 | -86.1581 | 8-10 | W | 255 | 270 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 61.0 | 92 | 0.157 | 0.157 | 0 | 0.000 | 0.000 | 63 | 13451.4 | 10.63 | 239.656830 | 39.7684 | -86.1581 | 10+ | SW | 225 | 225 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 62.1 | 78 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 46916.0 | 8.72 | 247.380096 | 39.7684 | -86.1581 | 8-10 | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 63.4 | 67 | 0.071 | 0.071 | 0 | 0.000 | 0.000 | 61 | 21325.5 | 10.55 | 212.005341 | 39.7684 | -86.1581 | 10+ | SW | 210 | 225 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 64.8 | 59 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 59383.2 | 10.28 | 224.118683 | 39.7684 | -86.1581 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 65.4 | 37 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 57086.6 | 10.67 | 236.976120 | 39.7684 | -86.1581 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 65.3 | 33 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 54133.9 | 8.20 | 258.996490 | 39.7684 | -86.1581 | 8-10 | W | 255 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 71.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 174868.8 | 18.68 | 196.699326 | 39.7589 | -84.1916 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 74.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 159776.9 | 20.15 | 202.864548 | 39.7589 | -84.1916 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 77.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 134514.4 | 18.42 | 204.386368 | 39.7589 | -84.1916 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 79.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 132874.0 | 17.61 | 205.588470 | 39.7589 | -84.1916 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 80.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 161089.2 | 18.35 | 189.117783 | 39.7589 | -84.1916 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 81.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 146653.5 | 18.84 | 195.851990 | 39.7589 | -84.1916 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 80.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 158792.7 | 19.21 | 206.266571 | 39.7589 | -84.1916 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 79.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 155183.7 | 15.90 | 193.840714 | 39.7589 | -84.1916 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 78.8 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 159448.8 | 16.34 | 199.179108 | 39.7589 | -84.1916 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 77.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 152887.1 | 16.41 | 205.866302 | 39.7589 | -84.1916 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 74.4 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 126968.5 | 11.83 | 195.350189 | 39.7589 | -84.1916 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 73.1 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 115813.6 | 12.51 | 206.564987 | 39.7589 | -84.1916 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 72.2 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 101706.0 | 13.11 | 207.439636 | 39.7589 | -84.1916 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 71.9 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 91207.4 | 12.21 | 206.095367 | 39.7589 | -84.1916 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 71.9 | 6 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 86286.1 | 12.75 | 201.614838 | 39.7589 | -84.1916 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 71.0 | 17 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 84973.8 | 12.72 | 214.249084 | 39.7589 | -84.1916 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 70.4 | 20 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 85958.0 | 12.93 | 217.266479 | 39.7589 | -84.1916 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 69.7 | 18 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 82677.2 | 11.79 | 213.388535 | 39.7589 | -84.1916 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 70.0 | 26 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 79396.3 | 14.02 | 213.943634 | 39.7589 | -84.1916 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 70.6 | 39 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 75459.3 | 14.29 | 230.079666 | 39.7589 | -84.1916 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 68.7 | 46 | 0.012 | 0.012 | 0 | 0.000 | 0.000 | 51 | 63976.4 | 10.92 | 227.489594 | 39.7589 | -84.1916 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 67.7 | 31 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 62336.0 | 10.60 | 224.144989 | 39.7589 | -84.1916 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 67.0 | 31 | 0.004 | 0.004 | 0 | 0.000 | 0.000 | 51 | 54133.9 | 10.74 | 215.676498 | 39.7589 | -84.1916 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 66.4 | 39 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 52821.5 | 12.17 | 216.027466 | 39.7589 | -84.1916 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 63.8 | 63 | 0.709 | 0.709 | 0 | 0.000 | 0.000 | 65 | 4921.3 | 14.15 | 230.774338 | 39.7589 | -84.1916 | 10+ | SW | 225 | 225 | Moderate (2-5 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 64.7 | 84 | 0.169 | 0.169 | 0 | 0.000 | 0.000 | 63 | 11154.9 | 15.51 | 236.768280 | 39.7589 | -84.1916 | 10+ | SW | 225 | 225 | Excellent (10-30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 66.6 | 80 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 63976.4 | 10.50 | 243.435013 | 39.7589 | -84.1916 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 69.1 | 42 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 73162.7 | 12.29 | 236.888641 | 39.7589 | -84.1916 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 66.5 | 30 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 65288.7 | 8.70 | 223.958466 | 39.7589 | -84.1916 | 8-10 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 67.9 | 15 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 68897.6 | 11.43 | 210.579147 | 39.7589 | -84.1916 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 66.0 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 187336.0 | 7.25 | 171.119415 | 40.4406 | -79.9959 | 6-8 | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 73.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 220144.4 | 11.81 | 189.819229 | 40.4406 | -79.9959 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 77.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 208661.4 | 14.25 | 202.135544 | 40.4406 | -79.9959 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 79.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 207677.2 | 15.41 | 205.820938 | 40.4406 | -79.9959 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 83.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 209973.8 | 16.27 | 211.504211 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 84.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 229658.8 | 16.04 | 219.907837 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 84.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 237532.8 | 16.53 | 219.507645 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 84.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 238517.1 | 15.64 | 213.917465 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 83.6 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 255249.3 | 15.82 | 213.465408 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 81.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 253280.8 | 12.85 | 211.476791 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 77.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 240485.6 | 11.34 | 202.011337 | 40.4406 | -79.9959 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 74.3 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 223753.3 | 11.02 | 203.962494 | 40.4406 | -79.9959 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 73.7 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 209973.8 | 10.69 | 217.349426 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 71.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 196850.4 | 6.22 | 217.694305 | 40.4406 | -79.9959 | 6-8 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 69.6 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 179790.0 | 6.34 | 227.862473 | 40.4406 | -79.9959 | 6-8 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 67.7 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 157152.2 | 7.73 | 202.109497 | 40.4406 | -79.9959 | 6-8 | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 66.7 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 130905.5 | 8.25 | 212.828537 | 40.4406 | -79.9959 | 8-10 | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 67.1 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 122375.3 | 10.31 | 220.601212 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 66.9 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 134514.4 | 11.68 | 216.430954 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 66.8 | 5 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 125656.2 | 12.86 | 220.060715 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 67.3 | 8 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 116469.8 | 12.09 | 218.990997 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 66.9 | 10 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 109252.0 | 12.86 | 220.060715 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 67.2 | 28 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 92847.8 | 14.15 | 230.774338 | 40.4406 | -79.9959 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 64.4 | 29 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 50853.0 | 8.14 | 200.924576 | 40.4406 | -79.9959 | 8-10 | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 65.4 | 11 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 55446.2 | 14.21 | 213.439880 | 40.4406 | -79.9959 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 70.1 | 10 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 66929.1 | 15.34 | 225.590576 | 40.4406 | -79.9959 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 70.9 | 10 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 70538.1 | 15.72 | 230.194473 | 40.4406 | -79.9959 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 71.6 | 18 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 78084.0 | 16.81 | 236.944168 | 40.4406 | -79.9959 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 68.0 | 36 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 68241.5 | 10.12 | 234.904114 | 40.4406 | -79.9959 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 72.3 | 50 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 81692.9 | 15.41 | 242.319031 | 40.4406 | -79.9959 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 58.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 153871.4 | 7.02 | 149.349411 | 39.9995 | -78.2341 | 6-8 | SE | 135 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 61.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 2 | 171916.0 | 7.81 | 166.759476 | 39.9995 | -78.2341 | 6-8 | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 66.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 180118.1 | 8.94 | 148.298615 | 39.9995 | -78.2341 | 8-10 | SE | 135 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 69.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 178477.7 | 12.62 | 150.255219 | 39.9995 | -78.2341 | 10+ | SE | 150 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 73.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 179461.9 | 14.91 | 154.204025 | 39.9995 | -78.2341 | 10+ | SE | 150 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 75.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 209973.8 | 13.13 | 156.929565 | 39.9995 | -78.2341 | 10+ | SE | 150 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 77.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 216535.4 | 11.24 | 137.419540 | 39.9995 | -78.2341 | 10+ | SE | 135 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 80.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 241797.9 | 11.74 | 172.333282 | 39.9995 | -78.2341 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 79.8 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 236548.6 | 9.72 | 156.974472 | 39.9995 | -78.2341 | 8-10 | SE | 150 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 76.7 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 217191.6 | 10.44 | 170.134262 | 39.9995 | -78.2341 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 71.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 205708.7 | 11.93 | 173.541275 | 39.9995 | -78.2341 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 69.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 187664.0 | 12.43 | 171.724197 | 39.9995 | -78.2341 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 67.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 183070.9 | 12.78 | 175.985901 | 39.9995 | -78.2341 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 66.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 166666.7 | 11.63 | 180.000000 | 39.9995 | -78.2341 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 66.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 154527.6 | 8.50 | 181.507401 | 39.9995 | -78.2341 | 8-10 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 63.9 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 145341.2 | 6.80 | 170.537750 | 39.9995 | -78.2341 | 6-8 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 63.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 154199.5 | 7.69 | 171.634201 | 39.9995 | -78.2341 | 6-8 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 63.0 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 153215.2 | 7.40 | 176.531845 | 39.9995 | -78.2341 | 6-8 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 62.1 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 147637.8 | 6.97 | 174.472549 | 39.9995 | -78.2341 | 6-8 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 61.5 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 146653.5 | 7.19 | 174.644272 | 39.9995 | -78.2341 | 6-8 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 61.2 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 145669.3 | 7.00 | 153.435013 | 39.9995 | -78.2341 | 6-8 | SE | 150 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 61.4 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 134186.4 | 6.27 | 182.045364 | 39.9995 | -78.2341 | 6-8 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 64.3 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 122047.2 | 6.77 | 172.405441 | 39.9995 | -78.2341 | 6-8 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 60.3 | 17 | 0.441 | 0.441 | 0 | 0.000 | 0.000 | 65 | 5905.5 | 17.59 | 262.694336 | 39.9995 | -78.2341 | 10+ | W | 255 | 270 | Good (5-10 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 61.2 | 15 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 56102.4 | 9.81 | 226.847595 | 39.9995 | -78.2341 | 8-10 | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 67.2 | 10 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 68897.6 | 11.99 | 216.656204 | 39.9995 | -78.2341 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 71.4 | 9 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 85629.9 | 14.83 | 236.070160 | 39.9995 | -78.2341 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 73.7 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 104658.8 | 17.95 | 247.270233 | 39.9995 | -78.2341 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 75.1 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 117126.0 | 20.81 | 243.159561 | 39.9995 | -78.2341 | 10+ | SW | 240 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 73.4 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 103018.4 | 18.15 | 247.543015 | 39.9995 | -78.2341 | 10+ | W | 240 | 270 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 14:00:00 | 59.0 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 197178.5 | 5.22 | 170.134262 | 40.7357 | -74.1724 | 4-6 | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 14 | April | Apr | 18 | Friday | Fri | Apr 18 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-18 15:00:00 | 65.3 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 224737.5 | 10.52 | 182.436600 | 40.7357 | -74.1724 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 15 | April | Apr | 18 | Friday | Fri | Apr 18 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-18 16:00:00 | 67.9 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 227690.3 | 9.87 | 176.099579 | 40.7357 | -74.1724 | 8-10 | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 16 | April | Apr | 18 | Friday | Fri | Apr 18 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-18 17:00:00 | 67.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 169619.4 | 11.50 | 153.435013 | 40.7357 | -74.1724 | 10+ | SE | 150 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 17 | April | Apr | 18 | Friday | Fri | Apr 18 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-18 18:00:00 | 70.4 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 192585.3 | 12.81 | 155.224884 | 40.7357 | -74.1724 | 10+ | SE | 150 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 18 | April | Apr | 18 | Friday | Fri | Apr 18 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-18 19:00:00 | 71.5 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 197834.6 | 13.37 | 162.474350 | 40.7357 | -74.1724 | 10+ | S | 150 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 19 | April | Apr | 18 | Friday | Fri | Apr 18 | 19:00:00 | 1970-01-01 19:00:00 |
| 2025-04-18 20:00:00 | 72.2 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 202755.9 | 11.02 | 156.037506 | 40.7357 | -74.1724 | 10+ | SE | 150 | 135 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 20 | April | Apr | 18 | Friday | Fri | Apr 18 | 20:00:00 | 1970-01-01 20:00:00 |
| 2025-04-18 21:00:00 | 74.1 | 0 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 231627.3 | 14.49 | 188.880585 | 40.7357 | -74.1724 | 10+ | S | 180 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 21 | April | Apr | 18 | Friday | Fri | Apr 18 | 21:00:00 | 1970-01-01 21:00:00 |
| 2025-04-18 22:00:00 | 72.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 237204.7 | 15.05 | 174.882782 | 40.7357 | -74.1724 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 22 | April | Apr | 18 | Friday | Fri | Apr 18 | 22:00:00 | 1970-01-01 22:00:00 |
| 2025-04-18 23:00:00 | 67.4 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 211286.1 | 14.24 | 171.869980 | 40.7357 | -74.1724 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-18 | 2025 | 4 | 23 | April | Apr | 18 | Friday | Fri | Apr 18 | 23:00:00 | 1970-01-01 23:00:00 |
| 2025-04-19 | 62.8 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 156168.0 | 10.33 | 175.030350 | 40.7357 | -74.1724 | 10+ | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 0 | April | Apr | 19 | Saturday | Sat | Apr 19 | 00:00:00 | 1970-01-01 |
| 2025-04-19 01:00:00 | 60.2 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 115813.6 | 7.11 | 155.854462 | 40.7357 | -74.1724 | 6-8 | SE | 150 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 1 | April | Apr | 19 | Saturday | Sat | Apr 19 | 01:00:00 | 1970-01-01 01:00:00 |
| 2025-04-19 02:00:00 | 58.3 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 95800.5 | 5.16 | 162.349792 | 40.7357 | -74.1724 | 4-6 | S | 150 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 2 | April | Apr | 19 | Saturday | Sat | Apr 19 | 02:00:00 | 1970-01-01 02:00:00 |
| 2025-04-19 03:00:00 | 56.6 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 80380.6 | 4.41 | 156.037506 | 40.7357 | -74.1724 | 4-6 | SE | 150 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 3 | April | Apr | 19 | Saturday | Sat | Apr 19 | 03:00:00 | 1970-01-01 03:00:00 |
| 2025-04-19 04:00:00 | 56.5 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 73818.9 | 3.80 | 151.927612 | 40.7357 | -74.1724 | 2-4 | SE | 150 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 4 | April | Apr | 19 | Saturday | Sat | Apr 19 | 04:00:00 | 1970-01-01 04:00:00 |
| 2025-04-19 05:00:00 | 55.1 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 66929.1 | 3.80 | 118.072395 | 40.7357 | -74.1724 | 2-4 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 5 | April | Apr | 19 | Saturday | Sat | Apr 19 | 05:00:00 | 1970-01-01 05:00:00 |
| 2025-04-19 06:00:00 | 55.1 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 60695.5 | 3.50 | 116.564987 | 40.7357 | -74.1724 | 2-4 | SE | 105 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 6 | April | Apr | 19 | Saturday | Sat | Apr 19 | 06:00:00 | 1970-01-01 06:00:00 |
| 2025-04-19 07:00:00 | 55.8 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 58398.9 | 3.98 | 141.842728 | 40.7357 | -74.1724 | 2-4 | SE | 135 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 7 | April | Apr | 19 | Saturday | Sat | Apr 19 | 07:00:00 | 1970-01-01 07:00:00 |
| 2025-04-19 08:00:00 | 54.7 | 1 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 56102.4 | 5.11 | 156.801392 | 40.7357 | -74.1724 | 4-6 | SE | 150 | 135 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 8 | April | Apr | 19 | Saturday | Sat | Apr 19 | 08:00:00 | 1970-01-01 08:00:00 |
| 2025-04-19 09:00:00 | 55.2 | 2 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 55774.3 | 4.94 | 174.805664 | 40.7357 | -74.1724 | 4-6 | S | 165 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 9 | April | Apr | 19 | Saturday | Sat | Apr 19 | 09:00:00 | 1970-01-01 09:00:00 |
| 2025-04-19 10:00:00 | 56.0 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 54461.9 | 5.88 | 188.746078 | 40.7357 | -74.1724 | 4-6 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 10 | April | Apr | 19 | Saturday | Sat | Apr 19 | 10:00:00 | 1970-01-01 10:00:00 |
| 2025-04-19 11:00:00 | 57.3 | 4 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 56758.5 | 7.36 | 199.536743 | 40.7357 | -74.1724 | 6-8 | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 11 | April | Apr | 19 | Saturday | Sat | Apr 19 | 11:00:00 | 1970-01-01 11:00:00 |
| 2025-04-19 12:00:00 | 59.7 | 7 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 60367.5 | 7.60 | 193.627014 | 40.7357 | -74.1724 | 6-8 | S | 180 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 12 | April | Apr | 19 | Saturday | Sat | Apr 19 | 12:00:00 | 1970-01-01 12:00:00 |
| 2025-04-19 13:00:00 | 65.4 | 7 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 78740.2 | 12.75 | 201.614838 | 40.7357 | -74.1724 | 10+ | S | 195 | 180 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 13 | April | Apr | 19 | Saturday | Sat | Apr 19 | 13:00:00 | 1970-01-01 13:00:00 |
| 2025-04-19 14:00:00 | 70.0 | 10 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 94160.1 | 16.02 | 215.909821 | 40.7357 | -74.1724 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 14 | April | Apr | 19 | Saturday | Sat | Apr 19 | 14:00:00 | 1970-01-01 14:00:00 |
| 2025-04-19 15:00:00 | 74.1 | 7 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 115157.5 | 17.88 | 226.520706 | 40.7357 | -74.1724 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 15 | April | Apr | 19 | Saturday | Sat | Apr 19 | 15:00:00 | 1970-01-01 15:00:00 |
| 2025-04-19 16:00:00 | 69.0 | 10 | 0.016 | 0.016 | 0 | 0.000 | 0.000 | 51 | 57742.8 | 15.34 | 225.590576 | 40.7357 | -74.1724 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 16 | April | Apr | 19 | Saturday | Sat | Apr 19 | 16:00:00 | 1970-01-01 16:00:00 |
| 2025-04-19 17:00:00 | 72.4 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 3 | 87926.5 | 15.43 | 209.538681 | 40.7357 | -74.1724 | 10+ | SW | 195 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 17 | April | Apr | 19 | Saturday | Sat | Apr 19 | 17:00:00 | 1970-01-01 17:00:00 |
| 2025-04-19 18:00:00 | 77.8 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 0 | 104330.7 | 19.46 | 223.602890 | 40.7357 | -74.1724 | 10+ | SW | 210 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 18 | April | Apr | 19 | Saturday | Sat | Apr 19 | 18:00:00 | 1970-01-01 18:00:00 |
| 2025-04-19 19:00:00 | 80.9 | 3 | 0.000 | 0.000 | 0 | 0.000 | 0.000 | 1 | 121391.1 | 20.78 | 235.967834 | 40.7357 | -74.1724 | 10+ | SW | 225 | 225 | Clearest (>30 km) | 2025-04-19 | 2025 | 4 | 19 | April | Apr | 19 | Saturday | Sat | Apr 19 | 19:00:00 | 1970-01-01 19:00:00 |
| source: | ||||||||||||||||||||||||||||||
|
1 Date of the recorded data., 2 Temperature at 2 meters above ground., 3 Probability of precipitation., 4 Amount of precipitation., 5 Amount of rain., 6 Amount of showers., 7 Amount of snowfall., 8 Depth of snow., 9 Code representing the weather condition., 10 Visibility distance., 11 Wind speed at 10 meters above ground., 12 Wind direction at 10 meters above ground., 13 Vertical location coordinate., 14 Horizontal location coordinate., 15 Binned categories for wind speed., 16 Cardinal direction of the wind., 17 Binned categories for wind direction., 18 Numeric angle representing wind direction., 19 Categorized visibility levels., 20 Date without time, 21 Year extracted from the date., 22 Month extracted from the date., 23 Hour extracted from the date., 24 Name of the month., 25 Abbreviated name of the month., 26 Day extracted from the date., 27 Name of the weekday., 28 Abbreviated name of the weekday., 29 Combined month and day., 30 Time extracted from the date., 31 Common date format for time-based analysis.
|
||||||||||||||||||||||||||||||
Replace the forecast_data table; optionally, create an output preview object.
-- Replace the historical weather table
CREATE OR REPLACE TABLE forecast_data AS
SELECT * FROM transformed_forecast;
-- Preview results
SELECT * FROM forecast_data LIMIT 10;Drop transformation view.
DROP VIEW transformed_forecast;Db cleanup
VACUUM forecast_data;Dataset: Historical, 1974-2024
Modular SQL, in-database transformation
-- Create or replace the view with modular CTEs and explicit column lists
CREATE OR REPLACE VIEW transformed_historical AS
WITH cleaned_data AS (
SELECT
date::TIMESTAMP AS date,
ROUND(temperature_2m::FLOAT, 1) AS temperature_2m,
ROUND(precipitation::FLOAT, 3) AS precipitation,
ROUND(rain::FLOAT, 3) AS rain,
ROUND(snowfall::FLOAT, 3) AS snowfall,
ROUND(snow_depth::FLOAT, 3) AS snow_depth,
weather_code AS weather_code,
ROUND(wind_speed_10m::FLOAT, 2) AS wind_speed_10m,
wind_direction_10m AS wind_direction_10m,
latitude AS latitude,
longitude AS longitude
FROM historical_data
),
transformed_data AS (
SELECT
*,
-- Speed bin
CASE
WHEN wind_speed_10m <= 2 THEN CAST('0-2' AS speed_bin_enum)
WHEN wind_speed_10m <= 4 THEN CAST('2-4' AS speed_bin_enum)
WHEN wind_speed_10m <= 6 THEN CAST('4-6' AS speed_bin_enum)
WHEN wind_speed_10m <= 8 THEN CAST('6-8' AS speed_bin_enum)
WHEN wind_speed_10m <= 10 THEN CAST('8-10' AS speed_bin_enum)
ELSE CAST('10+' AS speed_bin_enum)
END AS speed_bin,
-- Cardinal direction
CASE
WHEN wind_direction_10m BETWEEN 0 AND 22.5 THEN CAST('N' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 22.5 AND 67.5 THEN CAST('NE' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 67.5 AND 112.5 THEN CAST('E' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 112.5 AND 157.5 THEN CAST('SE' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 157.5 AND 202.5 THEN CAST('S' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 202.5 AND 247.5 THEN CAST('SW' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 247.5 AND 292.5 THEN CAST('W' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 292.5 AND 337.5 THEN CAST('NW' AS cardinal_direction_enum)
WHEN wind_direction_10m BETWEEN 337.5 AND 360 THEN CAST('N' AS cardinal_direction_enum)
ELSE NULL
END AS wind_direction_cardinal,
-- 15-degree direction bin (numeric)
FLOOR((wind_direction_10m - 1e-9) / 15) * 15 AS direction_bin
FROM cleaned_data
),
final_data AS (
SELECT
*,
-- Direction angle
CASE
WHEN wind_direction_cardinal = 'N' THEN 0
WHEN wind_direction_cardinal = 'NE' THEN 45
WHEN wind_direction_cardinal = 'E' THEN 90
WHEN wind_direction_cardinal = 'SE' THEN 135
WHEN wind_direction_cardinal = 'S' THEN 180
WHEN wind_direction_cardinal = 'SW' THEN 225
WHEN wind_direction_cardinal = 'W' THEN 270
WHEN wind_direction_cardinal = 'NW' THEN 315
ELSE NULL
END AS direction_angle,
-- Date parts
strftime(date, '%m-%d-%Y') AS date_only,
EXTRACT(YEAR FROM date) AS year,
EXTRACT(MONTH FROM date) AS month,
EXTRACT(hour FROM date) AS hour,
monthname(date)::month_name_enum AS month_name,
strftime(date, '%b')::month_abb_enum AS month_abb,
EXTRACT(DAY FROM date) AS day,
dayname(date)::weekday_name_enum AS weekday_name,
strftime(date, '%a')::weekday_abb_enum AS weekday_abb,
strftime(date, '%b %d') AS month_day,
strftime(date, '%H:%M:%S') AS time_only,
strptime('1970-01-01 ' || strftime(date, '%H:%M:%S'), '%Y-%m-%d %H:%M:%S') AS common_date
FROM transformed_data
)
-- Final output
SELECT * FROM final_data;Code
-- Final output
SELECT * FROM transformed_historical LIMIT 20;table setup
r_df <- viewOfHistorical |>
dplyr::mutate(
date = as.character(date),
common_date = as.character(common_date)
)
locations_list = colnames(r_df)
notes_list <- c(
"Date of the recorded data.",
"Temperature at 2 meters above ground.",
"Amount of precipitation.",
"Amount of rain.",
"Amount of snowfall.",
"Depth of snow.",
"Code representing the weather condition.",
"Wind speed at 10 meters above ground.",
"Wind direction at 10 meters above ground.",
"Vertical location coordinate.",
"Horizontal location coordinate.",
"Cardinal direction of the wind.",
"Binned categories for wind speed.",
"Binned categories for direction angle.",
"Numeric angle representing wind direction.",
"Date without time",
"Year extracted from the date.",
"Month extracted from the date.",
"Hour extracted from the date.",
"Name of the month.",
"Abbreviated name of the month.",
"Day extracted from the date.",
"Name of the weekday.",
"Abbreviated name of the weekday.",
"Combined month and day.",
"Time extracted from the date.",
"Common date format for time-based analysis."
)
footnotes_df <- tibble(
notes = notes_list,
locations = locations_list
)
pal_df <- tibble(
cols = locations_list,
pals = list(eval_palette("grDevices::Rocket", 10 , 'c', 1))
)
rTable <- r_table_theming(
r_df,
title = "Historical Data Preview",
subtitle = NULL,
footnotes_df,
source_note = md("**source**: "),
pal_df,
footnotes_multiline = FALSE,
table_font_size = pct(70),
#do_col_labels = TRUE,
)| Historical Data Preview | ||||||||||||||||||||||||||
| date1 | temperature_2m2 | precipitation3 | rain4 | snowfall5 | snow_depth6 | weather_code7 | wind_speed_10m8 | wind_direction_10m9 | latitude10 | longitude11 | speed_bin12 | wind_direction_cardinal13 | direction_bin14 | direction_angle15 | date_only16 | year17 | month18 | hour19 | month_name20 | month_abb21 | day22 | weekday_name23 | weekday_abb24 | month_day25 | time_only26 | common_date27 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1974-01-01 05:00:00 | 50.2 | 0 | 0 | 0 | 0 | 3 | 3.39 | 97.59455 | 33.4484 | -112.074 | 2-4 | E | 90 | 90 | 01-01-1974 | 1974 | 1 | 5 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 05:00:00 | 1970-01-01 05:00:00 |
| 1974-01-01 06:00:00 | 48.1 | 0 | 0 | 0 | 0 | 2 | 4.03 | 93.17977 | 33.4484 | -112.074 | 4-6 | E | 90 | 90 | 01-01-1974 | 1974 | 1 | 6 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 06:00:00 | 1970-01-01 06:00:00 |
| 1974-01-01 07:00:00 | 45.5 | 0 | 0 | 0 | 0 | 1 | 4.92 | 90.00000 | 33.4484 | -112.074 | 4-6 | E | 75 | 90 | 01-01-1974 | 1974 | 1 | 7 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 07:00:00 | 1970-01-01 07:00:00 |
| 1974-01-01 08:00:00 | 44.2 | 0 | 0 | 0 | 0 | 2 | 4.72 | 84.55976 | 33.4484 | -112.074 | 4-6 | E | 75 | 90 | 01-01-1974 | 1974 | 1 | 8 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 08:00:00 | 1970-01-01 08:00:00 |
| 1974-01-01 09:00:00 | 43.2 | 0 | 0 | 0 | 0 | 3 | 4.56 | 78.69010 | 33.4484 | -112.074 | 4-6 | E | 75 | 90 | 01-01-1974 | 1974 | 1 | 9 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 09:00:00 | 1970-01-01 09:00:00 |
| 1974-01-01 10:00:00 | 42.5 | 0 | 0 | 0 | 0 | 2 | 4.72 | 84.55976 | 33.4484 | -112.074 | 4-6 | E | 75 | 90 | 01-01-1974 | 1974 | 1 | 10 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 10:00:00 | 1970-01-01 10:00:00 |
| 1974-01-01 11:00:00 | 41.9 | 0 | 0 | 0 | 0 | 1 | 4.97 | 82.23492 | 33.4484 | -112.074 | 4-6 | E | 75 | 90 | 01-01-1974 | 1974 | 1 | 11 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 11:00:00 | 1970-01-01 11:00:00 |
| 1974-01-01 12:00:00 | 41.6 | 0 | 0 | 0 | 0 | 0 | 5.05 | 102.80426 | 33.4484 | -112.074 | 4-6 | E | 90 | 90 | 01-01-1974 | 1974 | 1 | 12 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 12:00:00 | 1970-01-01 12:00:00 |
| 1974-01-01 13:00:00 | 41.1 | 0 | 0 | 0 | 0 | 0 | 5.00 | 116.56499 | 33.4484 | -112.074 | 4-6 | SE | 105 | 135 | 01-01-1974 | 1974 | 1 | 13 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 13:00:00 | 1970-01-01 13:00:00 |
| 1974-01-01 14:00:00 | 41.0 | 0 | 0 | 0 | 0 | 0 | 6.36 | 129.28938 | 33.4484 | -112.074 | 6-8 | SE | 120 | 135 | 01-01-1974 | 1974 | 1 | 14 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 14:00:00 | 1970-01-01 14:00:00 |
| 1974-01-01 15:00:00 | 41.3 | 0 | 0 | 0 | 0 | 1 | 6.67 | 129.55963 | 33.4484 | -112.074 | 6-8 | SE | 120 | 135 | 01-01-1974 | 1974 | 1 | 15 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 15:00:00 | 1970-01-01 15:00:00 |
| 1974-01-01 16:00:00 | 45.0 | 0 | 0 | 0 | 0 | 1 | 9.03 | 131.98714 | 33.4484 | -112.074 | 8-10 | SE | 120 | 135 | 01-01-1974 | 1974 | 1 | 16 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 16:00:00 | 1970-01-01 16:00:00 |
| 1974-01-01 17:00:00 | 53.6 | 0 | 0 | 0 | 0 | 1 | 8.63 | 148.78166 | 33.4484 | -112.074 | 8-10 | SE | 135 | 135 | 01-01-1974 | 1974 | 1 | 17 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 17:00:00 | 1970-01-01 17:00:00 |
| 1974-01-01 18:00:00 | 59.6 | 0 | 0 | 0 | 0 | 1 | 8.75 | 175.60138 | 33.4484 | -112.074 | 8-10 | S | 165 | 180 | 01-01-1974 | 1974 | 1 | 18 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 18:00:00 | 1970-01-01 18:00:00 |
| 1974-01-01 19:00:00 | 64.2 | 0 | 0 | 0 | 0 | 3 | 12.85 | 211.47679 | 33.4484 | -112.074 | 10+ | SW | 210 | 225 | 01-01-1974 | 1974 | 1 | 19 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 19:00:00 | 1970-01-01 19:00:00 |
| 1974-01-01 20:00:00 | 65.7 | 0 | 0 | 0 | 0 | 3 | 22.42 | 233.93050 | 33.4484 | -112.074 | 10+ | SW | 225 | 225 | 01-01-1974 | 1974 | 1 | 20 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 20:00:00 | 1970-01-01 20:00:00 |
| 1974-01-01 21:00:00 | 65.9 | 0 | 0 | 0 | 0 | 3 | 25.00 | 236.30991 | 33.4484 | -112.074 | 10+ | SW | 225 | 225 | 01-01-1974 | 1974 | 1 | 21 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 21:00:00 | 1970-01-01 21:00:00 |
| 1974-01-01 22:00:00 | 64.9 | 0 | 0 | 0 | 0 | 3 | 21.06 | 247.52052 | 33.4484 | -112.074 | 10+ | W | 240 | 270 | 01-01-1974 | 1974 | 1 | 22 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 22:00:00 | 1970-01-01 22:00:00 |
| 1974-01-01 23:00:00 | 63.3 | 0 | 0 | 0 | 0 | 3 | 19.52 | 265.39999 | 33.4484 | -112.074 | 10+ | W | 255 | 270 | 01-01-1974 | 1974 | 1 | 23 | January | Jan | 1 | Tuesday | Tue | Jan 01 | 23:00:00 | 1970-01-01 23:00:00 |
| 1974-01-02 | 60.1 | 0 | 0 | 0 | 0 | 3 | 16.48 | 277.80008 | 33.4484 | -112.074 | 10+ | W | 270 | 270 | 01-02-1974 | 1974 | 1 | 0 | January | Jan | 2 | Wednesday | Wed | Jan 02 | 00:00:00 | 1970-01-01 |
| source: | ||||||||||||||||||||||||||
|
1 Date of the recorded data., 2 Temperature at 2 meters above ground., 3 Amount of precipitation., 4 Amount of rain., 5 Amount of snowfall., 6 Depth of snow., 7 Code representing the weather condition., 8 Wind speed at 10 meters above ground., 9 Wind direction at 10 meters above ground., 10 Vertical location coordinate., 11 Horizontal location coordinate., 12 Cardinal direction of the wind., 13 Binned categories for wind speed., 14 Binned categories for direction angle., 15 Numeric angle representing wind direction., 16 Date without time, 17 Year extracted from the date., 18 Month extracted from the date., 19 Hour extracted from the date., 20 Name of the month., 21 Abbreviated name of the month., 22 Day extracted from the date., 23 Name of the weekday., 24 Abbreviated name of the weekday., 25 Combined month and day., 26 Time extracted from the date., 27 Common date format for time-based analysis.
|
||||||||||||||||||||||||||
Replace the historical weather table
CREATE OR REPLACE TABLE historical_data AS
SELECT * FROM transformed_historical;Drop the view
DROP VIEW transformed_historical;Refresh database statistics for the query planner
VACUUM historical_data;Optimal Brokering
Create base_costs db table.
# Define base assumptions
base_costs <- tibble(
parameter = c(
"base_fuel_efficiency", # Semi-truck average
"fuel_price_per_gallon",
"base_driver_wage",
"base_speed_mph",
"base_toll_cost",
"equipment_cost_per_mile",
"profit_margin",
"route_distance_miles"),
value = c(6.5, 3.50, 25, 60, 50, 0.15, 0.20, 500)) |>
pivot_wider(names_from = parameter, values_from = value)
dbWriteTable(duckdb_con, "base_costs", base_costs)
query <- glue::glue_sql(
"SELECT
weather_code,
description,
fuel_multiplier,
route_delay_factor,
driver_wage_premium,
toll_multiplier,
equipment_wear_factor
FROM weather_codes
WHERE weather_code IN ({vals*});",
vals = c('0', '63', '75'),
.con = duckdb_con
)
dbWriteTable(duckdb_con, "weather_scenarios", dbGetQuery(duckdb_con, query))In database calculations return hypothetical costs associated with a certain scenarios based on weather code data.
cost_calculation_query <- glue::glue_sql(.con = duckdb_con,
"WITH cost_components AS (
SELECT
weather_code,
description,
-- Base calculations
(route_distance_miles / base_fuel_efficiency) * fuel_price_per_gallon * fuel_multiplier AS raw_fuel,
(route_distance_miles / (base_speed_mph / route_delay_factor)) * base_driver_wage * (1 + driver_wage_premium) AS raw_labor,
route_distance_miles * equipment_cost_per_mile * equipment_wear_factor AS raw_equipment,
base_toll_cost * toll_multiplier AS raw_toll,
profit_margin
FROM base_costs
CROSS JOIN weather_scenarios
)
SELECT
CONCAT(weather_code, ' (', description, ')') AS 'Scenario',
ROUND(raw_fuel, 2) AS 'Fuel Cost',
ROUND(raw_labor, 2) AS 'Labor Cost',
ROUND(raw_equipment, 2) AS 'Equipment Cost',
ROUND(raw_toll, 2) AS 'Toll Cost',
ROUND(raw_fuel + raw_labor + raw_equipment + raw_toll, 2) AS 'Total Cost',
ROUND((raw_fuel + raw_labor + raw_equipment + raw_toll) * (1 + profit_margin), 2) AS 'Brokerage Price'
FROM cost_components;",
.sep = "\n"
)
ccTable <- dbGetQuery(duckdb_con, cost_calculation_query)table setup
locations_list = colnames(ccTable)
notes_list <- c(
"Scenario" = "Weather conditions from WMO weather codes",
"Fuel Cost" = "Calculated: (distance / efficiency) × fuel price × weather multiplier",
"Labor Cost" = "Drive time × ($25/hr × (1 + wage premium)), where drive time = distance / (base speed / delay factor)",
"Equipment Cost" = "Miles × $0.15/mile × equipment wear factor",
"Toll Cost" = "Base toll × weather-adjusted toll multiplier",
"Total Cost" = "Sum of all cost components before profit margin",
"Brokerage Price" = "Total cost × 1.20 (20% profit margin)"
)
footnotes_df <- tibble(
notes = notes_list,
locations = locations_list
)
pal_df <- tibble(
cols = locations_list,
pals = list(eval_palette("grDevices::RdYlGn", 10, 'c', -1))
)
rTable <- r_table_theming(
ccTable,
title = "Cost Breakdown by Weather Scenario",
subtitle = NULL,
footnotes_df,
source_note = md("**source**: "),
pal_df,
footnotes_multiline = TRUE,
table_font_size = pct(90),
# do_col_labels = TRUE,
target_everything = TRUE,
color_by_columns = "Brokerage Price"
)| Cost Breakdown by Weather Scenario | ||||||
| Scenario1 | Fuel Cost2 | Labor Cost3 | Equipment Cost4 | Toll Cost5 | Total Cost6 | Brokerage Price7 |
|---|---|---|---|---|---|---|
| 0 (Clear sky) | 269.23 | 208.33 | 75.00 | 50 | 602.56 | 723.08 |
| 63 (Rain: moderate) | 301.54 | 258.75 | 86.25 | 59 | 705.54 | 846.65 |
| 75 (Snow fall: heavy) | 376.92 | 438.02 | 108.75 | 80 | 1003.69 | 1204.43 |
| source: | ||||||
| 1 Weather conditions from WMO weather codes | ||||||
| 2 Calculated: (distance / efficiency) × fuel price × weather multiplier | ||||||
| 3 Drive time × ($25/hr × (1 + wage premium)), where drive time = distance / (base speed / delay factor) | ||||||
| 4 Miles × $0.15/mile × equipment wear factor | ||||||
| 5 Base toll × weather-adjusted toll multiplier | ||||||
| 6 Sum of all cost components before profit margin | ||||||
| 7 Total cost × 1.20 (20% profit margin) | ||||||
Create the scenario explanations tibble.
scenario_explanations <- tribble(
~Scenario, ~Key_Differences, ~Fuel_Impact, ~Labor_Impact, ~Equipment_Impact, ~Toll_Impact,
"0 (Clear sky)",
"Baseline conditions with no weather penalties",
"No multiplier (1.0). MPG at rated efficiency. No detours",
"Full speed (60 mph). No wage premium. Standard hourly rate",
"Standard wear rate ($0.15/mile). No corrosion/weather damage",
"Base tolls only. No route adjustments",
"63 (Rain: moderate)",
"Moderate weather penalties with reduced visibility",
"12% increase (1.12x multiplier) From reduced MPG + minor detours",
"24% increase (1.24x multiplier). Speed ↓33% to ~40 mph. 15% wage premium",
"15% wear increase (1.15x multiplier). Wet road corrosion. Frequent brake use",
"18% toll increase (1.18x multiplier). Alternate routes. Dynamic pricing",
"75 (Snow fall: heavy)",
"Severe operational constraints",
"40% increase (1.40x multiplier). Low traction MPG loss. Major detours",
"110% increase (2.10x multiplier). Speed ↓78% to ~13 mph. 45% wage premium",
"45% wear increase (1.45x multiplier). Salt/slush damage. Frequent part failures",
"60% toll increase (1.60x multiplier). Mandatory snow routes. Peak pricing"
) |>
mutate(Total_Cost_Increase = c(0, 17.1, 66.5)) # Percentage vs baselinetable setup
locations_list = colnames(scenario_explanations)
notes_list <- list(
"Fuel multipliers from table, `weather_codes`, column `fuel_multiplier`",
"Speed reductions calculated as: `base_speed_mph / route_delay_factor`",
"Equipment wear factors account for corrosion (salt), particulate ingress, and mechanical stress",
"Toll multipliers reflect real-time pricing adjustments from `reroute_api` column data",
"Wage premiums follow OSHA hazard pay guidelines for transportation workers",
"MPG calculations assume 80,000 lb GVWR at sea level with DEF consumption",
"Dynamic pricing thresholds follow FHWA congestion management protocols"
)
footnotes_df <- tibble(
notes = notes_list,
locations = locations_list
)
pal_df <- tibble(
cols = locations_list,
pals = list(eval_palette("grDevices::RdYlGn", 10, 'c', -1))
)
rTable <- r_table_theming(
scenario_explanations,
title = "Scenario Explanations",
subtitle = NULL,
footnotes_df,
source_note = md("**source**:"),
pal_df,
multiline_feet = TRUE,
table_font_size = pct(90),
target_everything = TRUE,
color_by_columns = "Total_Cost_Increase",
#row_name_col = "Model"
)| Scenario Explanations | ||||||
| Scenario1 | Key_Differences2 | Fuel_Impact3 | Labor_Impact4 | Equipment_Impact5 | Toll_Impact6 | Total_Cost_Increase7 |
|---|---|---|---|---|---|---|
| 0 (Clear sky) | Baseline conditions with no weather penalties | No multiplier (1.0). MPG at rated efficiency. No detours | Full speed (60 mph). No wage premium. Standard hourly rate | Standard wear rate ($0.15/mile). No corrosion/weather damage | Base tolls only. No route adjustments | 0.0 |
| 63 (Rain: moderate) | Moderate weather penalties with reduced visibility | 12% increase (1.12x multiplier) From reduced MPG + minor detours | 24% increase (1.24x multiplier). Speed ↓33% to ~40 mph. 15% wage premium | 15% wear increase (1.15x multiplier). Wet road corrosion. Frequent brake use | 18% toll increase (1.18x multiplier). Alternate routes. Dynamic pricing | 17.1 |
| 75 (Snow fall: heavy) | Severe operational constraints | 40% increase (1.40x multiplier). Low traction MPG loss. Major detours | 110% increase (2.10x multiplier). Speed ↓78% to ~13 mph. 45% wage premium | 45% wear increase (1.45x multiplier). Salt/slush damage. Frequent part failures | 60% toll increase (1.60x multiplier). Mandatory snow routes. Peak pricing | 66.5 |
| source: | ||||||
| 1 Fuel multipliers from table, `weather_codes`, column `fuel_multiplier` | ||||||
| 2 Speed reductions calculated as: `base_speed_mph / route_delay_factor` | ||||||
| 3 Equipment wear factors account for corrosion (salt), particulate ingress, and mechanical stress | ||||||
| 4 Toll multipliers reflect real-time pricing adjustments from `reroute_api` column data | ||||||
| 5 Wage premiums follow OSHA hazard pay guidelines for transportation workers | ||||||
| 6 MPG calculations assume 80,000 lb GVWR at sea level with DEF consumption | ||||||
| 7 Dynamic pricing thresholds follow FHWA congestion management protocols | ||||||
\[ \color{rgb(184, 52, 38)}{\text{Optimal Price} = \bigg(\sum_{}{Costs}\bigg)\times \big( 1 + \text{Profit Margin}\big)} \]
\[ \color{rgb(184, 52, 38)}{\text{Fuel Cost}=\frac{\text{Distance}}{\text{Fuel Efficiency}} \times \text{Fuel Price} \times \underbrace{\text{Fuel Multiplier}}_\text{Weather Multiplier}} \]
\[ \color{rgb(184, 52, 38)}{\text{Labor Cost}=\bigg( \frac{\text{Distance}}{\text{Base Speed}\ /\ \underbrace{\text{Delay Factor}}_\text{Weather Multiplier}}\bigg)\times \text{Hourly Wage}\times \big(1 + \text{Wage Premium}\big)} \]
\[ \color{rgb(184, 52, 38)}{\text{Toll Cost}=\text{Base Toll}\times \underbrace{\text{Toll Multiplier}}_\text{Weather Multiplier}} \]
\[
\color{rgb(184, 52, 38)}{\text{Equipment Cost} = \underbrace{\text{Distance}}_\text{miles} \times \underbrace{\text{Base Equipment Cost Rate}}_\text{\$/mile} \times \underbrace{\text{Equipment Wear Factor}}_\text{Weather multiplier}}
\]
Estimating Route Delays (needs adjustment for real roads)
Forecast
Install and load DuckDB’s spatial library.
INSTALL spatial; LOAD spatial;Contextualize weather data by linking codes to insights using in-database processing.
WITH routes AS (
SELECT * FROM (
VALUES
(101, 38.748, -90.439, 40.7128, -74.0060, 280),
(102, 40.7128, -74.0060, 34.0522, -118.2437, 220)
) AS t(route_id, start_lat, start_lon, end_lat, end_lon, distance_miles)
),
route_geometries AS (
SELECT
route_id,
distance_miles,
ST_MakeLine(
ST_Point(start_lon, start_lat),
ST_Point(end_lon, end_lat)
) AS route_line
FROM routes
),
enhanced_forecast AS (
SELECT
*,
ST_Point(longitude, latitude) AS forecast_point
FROM forecast_data
),
route_weather_join AS (
SELECT
rg.route_id,
rg.distance_miles,
wc.*,
ST_Distance(rg.route_line, ef.forecast_point) AS distance_from_route
FROM route_geometries rg
JOIN enhanced_forecast ef
ON ST_Intersects(ST_Buffer(rg.route_line, 0.1), ef.forecast_point)
JOIN weather_codes wc USING (weather_code)
)
SELECT
route_id,
MAX(severity) AS max_severity,
SUM(risk_score) AS total_risk,
AVG(fuel_multiplier) * distance_miles AS projected_fuel,
SUM(risk_score * distance_miles / (60 * 10)) AS total_delay,
COUNT(*) AS weather_points_impacted
FROM route_weather_join
GROUP BY route_id, distance_miles
ORDER BY route_id ASC;table setup
locations_list = colnames(exampleOutput)
notes_list <- c(
"Unique identifier for the transportation route",
"Highest severity level of weather impacts along the route (Low/Moderate/International is committed to providing outstanding service. If you would like to provide feedback on or have High/Critical)",
"Sum of all risk scores from weather events affecting the route",
"Estimated total fuel consumption adjusted for weather multipliers",
"Cumulative delay time (hours) due to weather-related speed reductions",
"Number of geographic points along the route affected by adverse weather"
)
footnotes_df <- tibble(
notes = notes_list,
locations = locations_list)
pal_df <- tibble(
cols = locations_list
# pals = list(eval_palette("viridis::viridis", 2, 'c', 1))
)
rTable <- r_table_theming(
exampleOutput,
title = "Experimental Route Attributes",
subtitle = NULL,
footnotes_df,
source_note = md("**source**: "),
pal_df,
multiline_feet = TRUE,
table_font_size = pct(95),
target_everything = TRUE,
#row_name_col = "route_id",
)| Experimental Route Attributes | |||||
| route_id1 | max_severity2 | total_risk3 | projected_fuel4 | total_delay5 | weather_points_impacted6 |
|---|---|---|---|---|---|
| 101 | Moderate | 15.95 | 296.66 | 7.443333 | 60 |
| 102 | High | 23.95 | 227.04 | 8.781667 | 120 |
| source: | |||||
| 1 Unique identifier for the transportation route | |||||
| 2 Highest severity level of weather impacts along the route (Low/Moderate/International is committed to providing outstanding service. If you would like to provide feedback on or have High/Critical) | |||||
| 3 Sum of all risk scores from weather events affecting the route | |||||
| 4 Estimated total fuel consumption adjusted for weather multipliers | |||||
| 5 Cumulative delay time (hours) due to weather-related speed reductions | |||||
| 6 Number of geographic points along the route affected by adverse weather | |||||
Spatial Representation
Convert coordinates into geometric objects:
\(\color{rgb(184, 52, 38)}{Routes\to LineStrings}\)
\(\color{rgb(184, 52, 38)}{Forecast\ Points\to Points}\) \(\color{gray}{\text{ where:}}\) \(\color{rgb(184, 52, 38)}{LineString\small_R\normalsize=ST\_MakeLine(ST\_Point(start),\ ST\_Point(end))}\) \(\color{rgb(184, 52, 38)}{Point(F)=ST\_Point(longitude,\ latitude)}\)
\({\textbf{R}}\) - Route definition (tuple of start/end coordinates)
\({\textbf{LineString(R)}}\) - Linear geometry connecting route endpoints, generated by:
\(\color{gray}{ST\_MakeLine(ST\_Point(start_{Lon},\ start_{Lat}),\ ST\_Point(end_{Lon},\ end_{Lat}))}\)
\({\textbf{F}}\) - Raw forecast data point (from API)
\({\textbf{Point(F)}}\) - Geometric point representing weather observation, generated by:
\(\color{gray}{\ ST\_Point(longitude,\ latitude))}\)
\({\textbf{start, end}}\) - Route endpoints (latitude/longitude pairs)
\({\textbf{ST\_Point}}\) - DuckDB function converting coordinates to points
\({\textbf{ST\_MakeLine}}\) - DuckDB function creating route lines
Risk Aggregation
Summarize impacts per route:
\(\color{rgb(184, 52, 38)}{Total\ Risk_R=\sum{risk\_score}^{}}\)
\(\color{rgb(184, 52, 38)}{Max\ Severity\small_R\normalsize=max(severity)}\)
\(\color{rgb(184, 52, 38)}{Fuel\ Impact_R=distance\ \times \ \overline{fuel\_multiplier}}\)
\(\color{rgb(184, 52, 38)}{Delay\small_R\normalsize=\left(\frac{distance}{60}\ \times\ route\_delay\right)\ +\ border\_delays}\)
\({\textbf{R}}\) - Route definition (tuple of start/end coordinates)
Spatial Filtering
Identify weather impacts along routes:
\(\color{rgb(184, 52, 38)}{Impacted\ Points=\{F\ |\ ST\_Intersects(ST\_Buffer(LineString(R),\ Point(F))\}}\)
\({\textbf{F}}\) - Weather forecast points
\({\textbf{R}}\) - Route geometry
\({\textbf{ST\_Buffer}}\) - Expands route line by 0.1 degr. (~11 km at equator)
Simplified Pipeline
\[ \color{rgb(184, 52, 38)}{Raw\ Forecast\overset{Spatialize}{\longrightarrow}Points\overset{Intersect\ Routes}{\longrightarrow}Filtered\ Data\overset{Aggregate}{\longrightarrow}Risk\ Metrics} \]
The workflow transforms raw coordinates into route risk profiles using spatial relationships and weighted averages.
Historical EDA
Parameterized SQL Aggregation Function Examples
Full parameterization using a glue_sql template
glue_sql_mean <- function(con,
group_cols,
transformation_col,
metric_col,
from_tbl) {
# Create parameterized query with glue_sql
query <- glue::glue_sql("
SELECT
{`group_cols`*}
,AVG({`transformation_col`}) AS {`metric_col`}
FROM {`from_tbl`}
GROUP BY {`group_cols`*}
ORDER BY {`group_cols`*}
", .con = con)
return(dbGetQuery(con, query))
}
glue_sql_sum <- function(con,
group_cols,
transformation_col,
metric_col,
from_tbl) {
query <- glue::glue_sql("
SELECT
{`group_cols`*}
,SUM({`transformation_col`}) AS {`metric_col`}
FROM {`from_tbl`}
GROUP BY {`group_cols`*}
ORDER BY {`group_cols`*}
", .con = con)
return(dbGetQuery(con, query))
}
glue_sql_count <- function(con,
group_cols,
transformation_col,
metric_col,
from_tbl) {
query <- glue::glue_sql("
SELECT
{`group_cols`*}
,COUNT({`transformation_col`}) AS {`metric_col`}
FROM {`from_tbl`}
GROUP BY {`group_cols`*}
ORDER BY {`group_cols`*}
", .con = con)
return(dbGetQuery(con, query))
}Testing sql aggregate functions.
# Define parameters
group_cols <- c("year", "month")
transformation_col <- "temperature_2m"
metric_col <- "avg_temp"
from_tbl <- "historical_data"
mean_data <- glue_sql_mean(
duckdb_con,
group_cols,
transformation_col,
metric_col,
from_tbl
)
# Define parameters
transformation_col <- "rain"
metric_col <- "sum_rain"
sum_data <- glue_sql_sum(
duckdb_con,
group_cols,
transformation_col,
metric_col,
from_tbl
)
transformation_col <- "weekday_name"
metric_col <- "count_weekdays"
group_cols <- c("year", "month", "weekday_abb")
count_data <- glue_sql_count(
duckdb_con,
group_cols,
transformation_col,
metric_col,
from_tbl
)Test Stats Visuals
ANOVA for categorical (e.g., weather_code) to continuous data (e.g., temperature, precipitation)
Historical relationship between temperature and weather code data.
# Example: Weather code vs temperature
temp_weather_code <- tbl(duckdb_con, "historical_data") |>
select(temperature_2m, weather_code) |>
dplyr::collect()
# anova_temp <-aov(temperature_2m ~ weather_code, data = temp_weather_code)
# summary(anova_temp)Forecast Plot Testing
Create a plot list for wind roses
base_path = "data/plots/"
plot_wind_rose_ggplot(duckdb_con)
fileList <-list.files(base_path, pattern = "^wind_rose")Disconnect From Databases
Dereference memory from the in-memory database connections.
dbDisconnect(duckdb_con)